StartForeground Bad Notification Error

匿名 (未验证) 提交于 2019-12-03 01:00:01

问题:

I am trying to use a while loop in order to update a notification every second. However on 2.3.3 & below, it crashes with these logcat errors:

08-14 07:30:17.394: E/AndroidRuntime(501): FATAL EXCEPTION: main 08-14 07:30:17.394: E/AndroidRuntime(501):  android.app.RemoteServiceException: Bad notification for startForeground:  java.lang.IllegalArgumentException: contentIntent required:  pkg=com.package.name id=77  notification=Notification(vibrate=null,sound=null,defaults=0x4,flags=0x40) 

The problem is even when I check Build.VERSION, the code crashes with the same logcat errors:

if (isRunning) {         n.defaults = Notification.DEFAULT_LIGHTS;         while (!RecordTimerTask.isRunning && isRunning) {             long now = System.currentTimeMillis() - startTime;             n.setLatestEventInfo(getApplicationContext(), getResources()                     .getString(R.string.notify_title),                     getDurationBreakdown(now), null);              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)                 startForeground(FOREGROUND_ID, n);             else                  notify.notify(ID, n);             try {                 Thread.sleep(1000);             } catch (InterruptedException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         } 

It seems like devices running 2.3.3 & below don't like the null notification intents. What I don't understand is why I get a logcat error about startForeground when it's never called?

回答1:

The problem is you call setLatestEventInfo with a null argument for the pendingIntent. This works on Android ICS but not on earlier versions...

Have a look on the documentation for the setLatestEventInfo.

Here is how your code should look (if you are pushing these notifications from a service):

        // The PendingIntent to launch our activity if the user selects this notification     PendingIntent contentIntent = PendingIntent.getActivity(this, 0,             new Intent(this, LocalServiceActivities.Controller.class), 0);      // Set the info for the views that show in the notification panel.     notification.setLatestEventInfo(this, getText(R.string.local_service_label),                    text, contentIntent); 

Code was quoted from Android official documentation.

Also see this for a similar issue on StackOverflow.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!