0

A、B、C の 3 つのアクティビティで構成される Android アプリがあります。

  • A はアプリケーション自体です (通常のアクティビティ)
  • Bは設定画面(PreferenceActivityで作成)
  • C はアバウト画面です (通常のアクティビティ)

アクティビティ間の関係は次のとおりです。

  • Aが主な活動です
  • Bの親はA
  • Cの親はB

アクティビティ A は、バックグラウンドに移行するときに通知を発生させます。これは、A の onStop() メソッド内で NotificationManager の notify() を呼び出すことによって実現されます。

ユーザーがアプリを起動すると、アクティビティ A から開始されます。ユーザーがホーム ボタンを押すと、ホーム画面が表示されるとすぐに通知が発生します。通知をクリックすると、ユーザーはアプリに戻ります。

すべてが機能しているように見えますが、好ましくない動作があります: ユーザーがアプリを起動してから設定に移動すると (したがって、アクティビティ A と B が表示されます)、通知も発生します (A がバックグラウンドに移行したため)ショー B)。

これは望ましくありません。ユーザーが見ているアクティビティに関係なく、アプリケーションがバックグラウンドに移行した場合にのみ通知を発生させる必要があります。

この適切な動作を実装するにはどうすればよいですか?

前もって感謝します、マルコ

4

2 に答える 2

1

通知を発生させる前にチェックされるブールフラグを設定し、アクティビティ B を開始する前に「false」に設定できます。

もちろん、この方法では、アクティビティ B と C でも同じことを行い、通知を発生させる必要があります。

または、前に示唆したように、独自のアプリケーション クラスを実装して、そこでコールバックをフェッチすることもできます。

于 2013-03-08T20:56:44.440 に答える
1

ブール値フラグshouldNotifyを作成し、他のアクティビティの 1 つを開くときに false に設定するだけです。あなたのコードがなければ、それを実装する方法を正確に伝えることはできませんが、アイデアを理解するための例を次に示します。

private boolean shouldNotify = true;

@Override 
public void onStart(){
    super.onStart();
    shouldNotify = true;
}

@Override
public void onStop(){
    super.onStop();
    if(shouldNotify){
        sendNotification();
    }
}


// Where you need to put these next snippets depends on how you've made your Activity

/*
 * Launching settings activity
 */
shouldNotify = false;
Intent settingsIntent = new Intent(this, YourSettingsActivity.class);
startActivity(settingsIntent);
于 2013-03-08T20:57:39.013 に答える