1

完整的错误还包含:

    android.app.RemoteServiceException: Bad notification for startForeground:

我在这里阅读了其他类似的帖子,尝试了他们的建议并阅读了他们的链接,但仍有少数用户报告此错误。

概述

活动由外部应用程序启动。此活动启动自定义语音识别服务。它使用 startForeground:

    this.startService(intent);

然后活动调用finish();

该服务启动自定义语音识别类并在构造函数中将上下文传递给它。在“检测到语音开始”时,我显示以下通知:

    String notTitle = "Hello";
    String notificationText = "hello there";

    notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    myNotification = new Notification(
                android.R.drawable.ic_btn_speak_now, notTitle,
                System.currentTimeMillis());
    myNotification.flags |= Notification.FLAG_AUTO_CANCEL;

    Intent intent = new Intent();
    intent.setAction("com.android.settings.TTS_SETTINGS");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
        myNotification.contentIntent = pendingIntent;

    myNotification.setLatestEventInfo(mContext, notTitle,
                notificationText, pendingIntent);

    notificationManager.notify(MY_NOTIFICATION_ID, myNotification);

该通知不需要执行任何“onClick”操作,因为一旦用户停止讲话,它就会被取消。我最初传递了一个“空意图”,但是,在阅读了很多帖子之后,我添加了显示 TTS 设置的随机意图/pendingIntent,只是为了排除这个问题。

我的 99% 的用户对上述代码或传递空意图都没有问题。不过,我需要为 1% 解决这个问题,因为它是我的应用程序中非常重要的一部分。

任何建议将不胜感激。

4

1 回答 1

3

在我的例子中,Logcat 的调试很有说服力:“android.app.RemoteServiceException:startForeground 的错误通知:”第二行显示:PendingIntent null

在 Android 4.x 中,PendingIntent 为空对于启动前台服务来说不是问题,但在早期的 Android 版本中却是这样。

所以首先仔细检查调试日志(阅读所有行,为什么不,在这里发布)。如果您的代码中存在相同的问题,我将检查 pendingIntent 是否为空。如果mContext为空,这可能会发生!

查看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 官方文档

在 StackOverflow 上也可以看到类似的问题。

于 2012-08-27T08:23:51.640 回答