09-11 15:54:28.800: E/AndroidRuntime(24863): FATAL EXCEPTION: main
09-11 15:54:28.800: E/AndroidRuntime(24863): Process: com.sinvideo.joyshow, PID: 24863
09-11 15:54:28.800: E/AndroidRuntime(24863): java.lang.IllegalArgumentException: contentView required: pkg=com.sinvideo.joyshow id=1000 notification=Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x4 flags=0x0 kind=[null])
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Parcel.readException(Parcel.java:1472)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Parcel.readException(Parcel.java:1422)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:320)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.app.NotificationManager.notify(NotificationManager.java:136)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.app.NotificationManager.notify(NotificationManager.java:109)
09-11 15:54:28.800: E/AndroidRuntime(24863): at com.sinvideo.joyshow.view.SplashActivity$3$1.run(SplashActivity.java:193)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Handler.handleCallback(Handler.java:733)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Handler.dispatchMessage(Handler.java:95)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Looper.loop(Looper.java:136)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.app.ActivityThread.main(ActivityThread.java:5262)
09-11 15:54:28.800: E/AndroidRuntime(24863): at java.lang.reflect.Method.invokeNative(Native Method)
09-11 15:54:28.800: E/AndroidRuntime(24863): at java.lang.reflect.Method.invoke(Method.java:515)
09-11 15:54:28.800: E/AndroidRuntime(24863): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851)
09-11 15:54:28.800: E/AndroidRuntime(24863): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667)
解决方案如下:
但是setLatestEventInfo方法是一个过时的方法,至于用什么方式替代还有待研究
09-11 15:54:28.800: E/AndroidRuntime(24863): Process: com.sinvideo.joyshow, PID: 24863
09-11 15:54:28.800: E/AndroidRuntime(24863): java.lang.IllegalArgumentException: contentView required: pkg=com.sinvideo.joyshow id=1000 notification=Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x4 flags=0x0 kind=[null])
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Parcel.readException(Parcel.java:1472)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Parcel.readException(Parcel.java:1422)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:320)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.app.NotificationManager.notify(NotificationManager.java:136)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.app.NotificationManager.notify(NotificationManager.java:109)
09-11 15:54:28.800: E/AndroidRuntime(24863): at com.sinvideo.joyshow.view.SplashActivity$3$1.run(SplashActivity.java:193)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Handler.handleCallback(Handler.java:733)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Handler.dispatchMessage(Handler.java:95)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.os.Looper.loop(Looper.java:136)
09-11 15:54:28.800: E/AndroidRuntime(24863): at android.app.ActivityThread.main(ActivityThread.java:5262)
09-11 15:54:28.800: E/AndroidRuntime(24863): at java.lang.reflect.Method.invokeNative(Native Method)
09-11 15:54:28.800: E/AndroidRuntime(24863): at java.lang.reflect.Method.invoke(Method.java:515)
09-11 15:54:28.800: E/AndroidRuntime(24863): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851)
09-11 15:54:28.800: E/AndroidRuntime(24863): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667)
09-11 15:54:28.800: E/AndroidRuntime(24863): at dalvik.system.NativeStart.main(Native Method)
这个我原本的代码,想要解决这个问题,只需要给notification添加一个事件setLatestEventInfo。
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notify = new Notification();
notify.icon = R.drawable.ic_launcher;
notify.tickerText = "点击下载最新App";
notify.when = System.currentTimeMillis();
notify.defaults = Notification.DEFAULT_LIGHTS;
notify.flags = Notification.FLAG_AUTO_CANCEL;
nm.notify(notificationId, notify);
instance.put("activeUpdateShouldShow", false);
解决方案如下:
Intent intent = new Intent(ctx, UpdateService.class);
intent.putExtra("apkUrl", apkurl);
PendingIntent pendIntent = PendingIntent.getService(ctx, 0, intent, 0);
notify.setLatestEventInfo(ctx, "AAAAA", "BBBBBBB", pendIntent);
但是setLatestEventInfo方法是一个过时的方法,至于用什么方式替代还有待研究