I am trying to send push notifications to a phone with GCM,it works fine on a device with android 4 but when I try to send notification on android 2.3 the app crashed and I am getting this error
03-13 11:44:25.994: E/AndroidRuntime(3579): FATAL EXCEPTION: IntentService[GCMIntentService-1074787013996-1]
03-13 11:44:25.994: E/AndroidRuntime(3579): java.lang.IllegalArgumentException: contentIntent required: pkg=com.itom.vreauRCA id=0 notification=Notification(vibrate=default,sound=default,defaults=0xffffffff)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Parcel.readException(Parcel.java:1251)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Parcel.readException(Parcel.java:1235)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:274)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.NotificationManager.notify(NotificationManager.java:110)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.NotificationManager.notify(NotificationManager.java:90)
03-13 11:44:25.994: E/AndroidRuntime(3579): at com.itom.vreauRCA.GCMIntentService.generateNotification(GCMIntentService.java:71)
03-13 11:44:25.994: E/AndroidRuntime(3579): at com.itom.vreauRCA.GCMIntentService.onMessage(GCMIntentService.java:36)
03-13 11:44:25.994: E/AndroidRuntime(3579): at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:223)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Handler.dispatchMessage(Handler.java:99)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Looper.loop(Looper.java:123)
03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.HandlerThread.run(HandlerThread.java:60)
03-13 11:44:26.374: V/GCMBroadcastReceiver(3579): onReceive: com.google.android.c2dm.intent.RECEIVE
03-13 11:44:26.374: V/GCMBroadcastReceiver(3579): GCM IntentService class: com.itom.vreauRCA.GCMIntentService
03-13 11:44:26.374: V/GCMBaseIntentService(3579): Acquiring wakelock
03-13 11:44:26.414: V/GCMBroadcastReceiver(3579): onReceive: com.google.android.c2dm.intent.RECEIVE
03-13 11:44:26.414: V/GCMBroadcastReceiver(3579): GCM IntentService class: com.itom.vreauRCA.GCMIntentService
03-13 11:44:26.414: V/GCMBaseIntentService(3579): Acquiring wakelock
this is my GCMBaseIntentService class
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.android.gcm.GCMBaseIntentService;
public class GCMIntentService extends GCMBaseIntentService {
private static final String TAG = "GCMIntentService";
PendingIntent contentIntent;
public GCMIntentService() {
super(GetObiecte.SENDER_ID);
}
@Override
protected void onRegistered(Context context, String registrationId) {
Log.i(TAG, "Device registered: regId = " + registrationId);
Log.d("GCMIntentService", "in GCMIntentService");
}
@Override
protected void onUnregistered(Context context, String registrationId) {
Log.i(TAG, "Device unregistered");
}
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
String a = intent.getStringExtra("data");
String b = intent.getStringExtra("data2");
generateNotification(context, a,b);
}
@Override
protected void onDeletedMessages(Context context, int total) {
Log.i(TAG, "Received deleted messages notification");
}
@Override
public void onError(Context context, String errorId) {
Log.i(TAG, "Received error: " + errorId);
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
Log.i(TAG, "Received recoverable error: " + errorId);
return super.onRecoverableError(context, errorId);
}
private void generateNotification(Context context, String message,
String title) {
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification();
notification.icon = R.drawable.ic_launcher;
notification.tickerText = "i-Asigutare";
notification.defaults = Notification.DEFAULT_ALL;
notification.setLatestEventInfo(context, title, message, null);
notificationManager.notify(0, notification);
}
}
The problem is about notification.setLatestEventInfo method.
This method was deprecated in API level 11 and usage of Notification.Builder is encouraged. You may also look at NotificationCompat.Builder for usage with support library.
If you still want to go with your way, you should look at the accepted answer on this question: Android - notification manager, having a notification without an intent
which clearly states using like this
notification.setLatestEventInfo(context, contentTitle, contentText, PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0));
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