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% は、上記のコードまたは null インテントを渡すことに問題はありません。ただし、これはアプリケーションの非常に重要な部分であるため、1% についてこれを解決する必要があります。

どんな提案でも大歓迎です。

4

1 に答える 1

3

私の場合、Logcatデバッグは雄弁でした: "android.app.RemoteServiceException:startForegroundの不正な通知:" 2行目:PendingIntent null

Android 4.xでは、PendingIntentがnullであっても、フォアグラウンドサービスを開始する場合は問題ありませんが、以前のAndroidバージョンでは問題があります。

したがって、まずデバッグログを注意深く確認します(すべての行を読んで、ここに投稿してください)。コードで同じ問題が発生する場合は、pendingIntentがnullでないことを確認します。これは、mContextがnullの場合に発生する可能性があります。

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 に答える