0

ボタンを押してサービスを開始するアクティビティがあります。サービスの初期化中にエラーが発生した場合、このエラーは通知によって次のように表示されます。

String tickerText = getString(R.string.init_error);

Notification notification = new Notification(
        R.drawable.ic_stat_notify_msg,
        tickerText, System.currentTimeMillis());

PendingIntent notificationIntent = PendingIntent.getActivity(
        this, 0, new Intent(this, MyServiceActivity.class), 0);

notification.setLatestEventInfo(this,
        getText(R.string.init_error_tts_title),
        getText(R.string.init_error_tts_text),
        notificationIntent);

NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
nm.notify(R.string.init_error, notification);

stopSelf();

ステータス バーに通知が表示されたら、通知ウィンドウを開きます。次に、通知をクリックすると、MyServiceActivity の新しいインスタンスが起動されます...なぜですか?

4

3 に答える 3

5

マニフェストのアクティビティ タグにこの属性を追加してみてください。

android:launchMode=["multiple" | "singleTop" |
                    "singleTask" | "singleInstance"]

singleTopまたはsingleInstance

アクティビティ要素のドキュメント

于 2012-05-06T20:29:40.967 に答える
2

最初のランチャーアクティビティ、次に選択アクティビティ、そしてプレーヤーを持つ音楽プレーヤーがあります。通知は、ユーザーをプレーヤーに戻す必要があります。私はクリストフのアイデアを使って、

android:alwaysRetainTaskState="true"
android:launchMode="singleTop"

PLAYER ACTIVITYのマンフェストのアクティビティタグで、正しい動作が得られました。次に、通知が PLAYER ACTIVITY クラスを呼び出すことを確認します。私は最初これをしませんでした。これはアプリ ランチャー クラスを呼び出し、これは新しい Android では問題ありませんでしたが、Android 2.3.6 では余分なアクティビティの問題が残りました。今、すべてが良いです。

私のアクティビティの修正がうまくいかない場合は、次の場所にある選択肢を総当たりで選択する必要があります。

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

私のプレーヤーはステートレスであり、サービスに接続されているボタンは 4 つだけです。ただし、通知のインテントが届いたときにアクティビティの状態を設定する必要がある場合は、onNewIntent をオーバーライドする必要があります。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
}

クリストフに敬意を表します。これは、正しい答えを得るのが難しい質問です。

于 2014-02-10T21:09:01.200 に答える
-1

適切な起動モードを設定するか、必要なインテント フラグを追加します。

于 2012-05-06T20:31:32.420 に答える