【问题标题】:StartForeground Bad Notification ErrorStartForeground 错误通知错误
【发布时间】:2018-07-11 16:58:03
【问题描述】:

我正在尝试使用 while 循环来每秒更新一次通知。但是在 2.3.3 及以下版本中,它会因这些 logcat 错误而崩溃:

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)

问题是即使我检查 Build.VERSION,代码也会崩溃并出现相同的 logcat 错误:

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();
            }
        }

运行 2.3.3 及以下版本的设备似乎不喜欢 null 通知意图。 我不明白的是,为什么在 startForeground 从未被调用时会出现 logcat 错误?

【问题讨论】:

    标签: android notifications android-service


    【解决方案1】:

    问题是您调用 setLatestEventInfo 时为 pendingIntent 提供了一个空参数。这适用于 Android ICS,但不适用于早期版本...

    查看 setLatestEventInfo 的文档。

    这是您的代码的外观(如果您从服务推送这些通知):

            // 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);
    

    代码引用自Android official documentation

    有关 StackOverflow 上的类似问题,另请参阅 this

    【讨论】:

    • 实际上,如果您不想处理点击通知,您可以使用空意图,例如:builder.setContentIntent(PendingIntent.getActivity(this, 0, new Intent( ), 0);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多