My Gcm Application receives fine message from GCM for Android 4 and higher. But below my application does not receive message.
This is the 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);
}
}
This is the Intent:
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);
}
This is the manifest:
<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>
I can't understand why doesn't it work below Android 4? Thanks in advance.
Change
<permission android:name="com.example.gcm.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
to
<permission android:name="com.example.gcmclient.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.gcmclient.permission.C2D_MESSAGE" />
and
<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>
to
<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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With