来自服务的通知

我正在尝试在收到C2DM消息时显示简单的通知。 服务提供给UI,但仍然在主线程上运行。 我见过有人声称你可以从服务中创建和显示通知。

@Override public void onMessage(Context context, Intent intent) { Log.w("Messsage","Message Received"); Bundle extras = intent.getExtras(); if (extras != null) { String payload = (String) extras.get("test"); createNotification(context,payload); } } private void createNotification(Context context, String message){ NotificationManager notificationmanager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.default1,message,System.currentTimeMillis()); notificationmanager.notify(0,notification); } 

}

 06-15 15:39:13.580: E/AndroidRuntime(11603): FATAL EXCEPTION: IntentService [stp.chrome@gmail.com] 06-15 15:39:13.580: E/AndroidRuntime(11603): java.lang.IllegalArgumentException: contentView required: pkg=com.upmc id=0 notification=Notification(contentView=null vibrate=null,sound=null,defaults=0x0,flags=0x0) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.Parcel.readException(Parcel.java:1331) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.Parcel.readException(Parcel.java:1281) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:299) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.app.NotificationManager.notify(NotificationManager.java:124) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.app.NotificationManager.notify(NotificationManager.java:103) 06-15 15:39:13.580: E/AndroidRuntime(11603): at com.upmc.C2DMReceiver.createNotification(C2DMReceiver.java:80) 06-15 15:39:13.580: E/AndroidRuntime(11603): at com.upmc.C2DMReceiver.onMessage(C2DMReceiver.java:66) 06-15 15:39:13.580: E/AndroidRuntime(11603): at com.google.android.c2dm.C2DMBaseReceiver.onHandleIntent(C2DMBaseReceiver.java:108) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.Handler.dispatchMessage(Handler.java:99) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.Looper.loop(Looper.java:137) 06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.HandlerThread.run(HandlerThread.java:60) 

我不知道为什么抛出这个exception。

首先,抛出exception是因为您创建了一个没有引用视图对象的通知(contentView属性设置为null)。 您必须在显示通知之前调用setLatestEventInfo 。

其次, 不推荐使用您正在使用的构造函数。 请使用Notification.Builder类创建通知。 如果您支持Android

第三,是的,可以从正在运行的服务创建通知。

您应该阅读通知文档。 如果未调用setLatestEventInfo()方法,则需要Content View。