8

私はインテント フラグについて誤解していると思います。バックグラウンドで実行されるストリーミング用のService.classがあり、通知も保持されます(通知オーバーレイメニューとPlayerApplicationで再生を停止/開始できます)。ユーザーが通知をクリックすると、PlayerApplicationActivity が画面に戻る必要があります。

ケースを期待して、すべて正常に動作します: ユーザーが SettingsScreenActivity を開く -> NotificationOverlayMenu を開く -> Notification をクリックする -> PendingIntent が PlayerApplicationActivity に再開する

さて、PlayerApplicationScreen はありますが、何もクリックできません。通知から再開すると、PlayerApplication の onCreate() がトリガーされないことがわかります。しかし、レイアウトはうまく見えます(onCreate()でも膨張しています)

Service.class で次の PendingIntent を使用しました。

PendingIntent contentIntent = PendingIntent.getActivity(
      this.getApplicationContext(), //Service.class
      0, 
      new Intent(this,PlayerApplicationActivity.class)
             .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP),
      0);

したがって、実際には、PendingIntent はアクティビティ (既に実行されている場合) を一番上に戻す必要があります。間違ったインテントを使用していますか、それともポイントがありませんか?

編集:そして私はManifest.xmlでlaunchModeを宣言しました

android:launchMode="singleTask"
4

2 に答える 2

7

アンドロイド開発者サイトによるとFLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOPおよび起動モード: SingleTask、呼び出しているアクティビティのインスタンスが既に実行されている場合、新しいインスタンスを作成する代わりに、onNewIntent()メソッドを呼び出します。したがって、 onCreate() が呼び出されていないときにアクティビティが実行されているというこの条件を確認する必要があると思います。

于 2013-03-05T17:17:31.120 に答える
1

私は自分が間違っていたことを理解しました:

  1. 私の目的のために、間違ったlaunchModeを使用しました。右のものはそうではありsingleTopませんsingleTask

  2. <application-node>の代わりにlaunchMode を宣言しました<activity-node>

    //Manifest.xml
    <activity
        android:name="..."
        android:launchMode="singleTop" >
    
于 2013-03-07T18:26:26.043 に答える