4
我的Gcm應用程序從GCM爲Android 4和更高版本收到精美消息。但在我的應用程序下面沒有收到消息。GCM在Android 4下不接收消息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?提前致謝。
非常感謝,現在的工作!只是爲了好奇,問題是什麼? – Hoper
不客氣!您沒有正確定義接收器的GCM權限和類別。它們都應該匹配您應用的主要軟件包。出於某種原因,這隻會導致舊版Android版本出現問題。 – Eran