Android GCM无法启动服务Intent

时间:2014-08-25 10:37:52

标签: android google-cloud-messaging

您好我想制作一个简单的通知应用程序。 我正在使用这个(http://www.youtube.com/watch?v=rmzv716SYkQ)教程。 这是我的代码。

清单文件

<uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<permission
    android:name="com.myapp.ntfapp.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.turk.bakistik.permission.C2D_MESSAGE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK"/>

应用程序块中的清单文件

<receiver 
        android:name=".MyNotificationService"
        android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="com.myapp.ntfapp" />
    </intent-filter>
</receiver> 

MyNotificationService类

public class MyNotificationService extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        try {
            String action = intent.getAction();
            if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) {
                String registrationId = intent.getStringExtra("registration_id");
                Log.i("ui", registrationId);
                String error = intent.getStringExtra("error");
                String unregistered = intent.getStringExtra("unregistered"); 
            }
            else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) {
                String data1 = intent.getStringExtra("data1");
                String data2 = intent.getStringExtra("data2");
            }
        } finally { }
    }
}

激活和停用主要活动中的按钮

button2=(Button)findViewById(R.id.button2); 
button3=(Button)findViewById(R.id.button3); 

button2.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) {   
        Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
        registrationIntent.putExtra("app", PendingIntent.getBroadcast(v.getContext(), 0, new Intent(), 0));
        registrationIntent.putExtra("sender", "123456789101112");
        startService(registrationIntent);   
    }
});

button3.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) {   
        Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
        unregIntent.putExtra("app", PendingIntent.getBroadcast(v.getContext(), 0, new Intent(), 0));
        startService(unregIntent);  
    }
});

点击激活按钮

W/ActivityManager(70): Unable to start service Intent { act=com.google.android.c2dm.intent.REGISTRATION (has extras) }: not found

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我发现你的清单存在不一致之处:

<permission
android:name="com.myapp.ntfapp.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.turk.bakistik.permission.C2D_MESSAGE" />

您应该在两者中使用您应用的套餐名称(com.myapp.ntfappcom.turk.bakistik)。

此外,您使用旧的和过时的方式注册GCM。您应该使用GoogleCloudMessaging.register方法,该方法是Google Play服务库的一部分。