Ошибка: - ошибка при получении идентификатора регистрации для c2dm - PullRequest
0 голосов
/ 20 марта 2012

Написал заявку на получение регистрационного идентификатора для c2dm. но я получаю исключение, поскольку не могу запустить информацию о компоненте активности в строке startService (намерение);

Мой основной класс

 public class IdTestActivity extends Activity {
    static TextView mytext = null;
    Context context = null;
    Intent intent = null;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER");
        intent.putExtra("app",PendingIntent.getBroadcast(this, 0, new Intent(), 0));
        intent.putExtra("sender", "dvimayandroid@gmail.com");
        startService(intent);


    }
}   

Мой класс приемника

    public class c2dmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.w("C2DM", "Registration Receiver called");
        if ("com.google.android.c2dm.intent.REGISTRATION".equals(action)) {
            Log.w("C2DM", "Received registration ID");
            final String registrationId = intent
                    .getStringExtra("sender");
            String error = intent.getStringExtra("error");

            Log.d("C2DM", "dmControl: registrationId = " + registrationId
                    + ", error = " + error);
            // TODO Send this to my application server
        }
    }

}

и мой файл манифеста

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.IdTest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application>
        <permission
            android:name="com.IdTest.permission.C2D_MESSAGE"
            android:protectionLevel="signature" />

        <uses-permission android:name="com.IdTest.permission.C2D_MESSAGE" />

        <activity
            android:name=".IdTestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".c2dmReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter >
                <action android:name="com.google.android.c2dm.intent.RECEIVE" >
                </action>

                <category android:name="com.IdTest" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

Ответы [ 3 ]

0 голосов
/ 20 марта 2012

вы должны добавить разрешение на получение сообщений от C2DM серверов, как это в вашем манифесте:

 <!-- This app has permission to register and receive message -->
   <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
0 голосов
/ 20 марта 2012

я думаю, что вы должны добавить фильтр регистрационных намерений к вашей услуге, таким образом вы можете получить регистрационный идентификатор

        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="your pacakge" />
        </intent-filter>

также вы получите идентификатор предстоящей регистрации, который вы используете

         intent.getStringExtra("registration_id");

надеюсь, что это может помочь вам

0 голосов
/ 20 марта 2012

Похоже, вам нужно добавить разрешение в манифест.Проверьте, что здесь нужно, и убедитесь, что ваше приложение включает в себя все:

http://code.google.com/android/c2dm/#manifest

...