我的Gcm应用程序收到来自GCM for Android 4及更高版本的精彩信息。但是在我的应用程序下面没有收到消息。
这是GcmBroadcastReceiver:
public class GcmBroadcastReceiver extends WakefulBroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
ComponentName comp = new ComponentName(context.getPackageName(), GCMIntentService.class.getName());
Log.i("GCM BROADCAST", "Begin Broadcast");
startWakefulService(context, intent.setComponent(comp));
setResultCode(Activity.RESULT_OK);
}
}
这是意图:
public class GCMIntentService extends IntentService
{
public static final String TAG = "GcmIntentService";
public static final int NOTIFICATION_ID = 1;
public GCMIntentService()
{
super(Constant.SENDER_ID);
}
/* (non-Javadoc)
* @see android.app.IntentService#onHandleIntent(android.content.Intent)
*/
@Override
protected void onHandleIntent(Intent intent)
{
// TODO Auto-generated method stub
Bundle extras = intent.getExtras();
// Prendo l'istanza di Google Cloud Messaging
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
// Prendo la stringa che mi indica il tipo di messaggio
String messageType = gcm.getMessageType(intent);
Log.i( TAG , "Messaggio ricevuto: " + extras.toString());
if(!extras.isEmpty())
{
// Azione nel caso il messaggio sia di errore
if(GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType))
sendNotification("Send error: " + extras.toString());
// Azione nel caso il messaggio sia riguardo l'eliminazione sul server
else if(GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType))
sendNotification("Deleted messages on server: " + extras.toString());
// Azione nel caso sia un messaggio rigardante la nostra applicazione
else if(GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType))
{
sendNotification(extras.getString("message"));
}
}
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
这是清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gcmclient"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="com.example.gcm.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.gcmclient.MainActivity"
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="com.example.gcmclient.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.gcmclient.broadcastreceivers" />
</intent-filter>
</receiver>
<service android:name="com.example.gcmclient.GCMIntentService" />
<service android:name="com.example.gcmclient.RegistrationService"></service>
<receiver
android:name="com.example.gcmclient.broadcastreceivers.BootHandler"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
我无法理解为什么它不能在Android 4下运行?提前谢谢。
答案 0 :(得分:7)
更改
<permission android:name="com.example.gcm.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
到
<permission android:name="com.example.gcmclient.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.gcmclient.permission.C2D_MESSAGE" />
和
<receiver
android:name="com.example.gcmclient.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.gcmclient.broadcastreceivers" />
</intent-filter>
</receiver>
到
<receiver
android:name="com.example.gcmclient.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.gcmclient" />
</intent-filter>
</receiver>