我试图用GCM向手机发送推送通知,它在
Android 4的设备上工作正常,但当我尝试在Android 2.3上发送通知应用程序崩溃,我收到此错误
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
这是我的GCMBaseIntentService类
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,"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,"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); } }
解决方法
问题是关于notification.setLatestEventInfo方法.
该方法在API级别11中为deprecated,鼓励使用Notification.Builder.您还可以查看NotificationCompat.Builder以了解支持库的用法.
如果你仍然想按照自己的方式行事,你应该看看这个问题的接受答案:
Android – notification manager,having a notification without an intent
这清楚地表明使用这样的
notification.setLatestEventInfo(context,contentTitle,contentText,PendingIntent.getActivity(getApplicationContext(),new Intent(),0));