0

データ処理を行い、新しいアイテムが見つかった場合はステータスバーでユーザーに通知するアプリケーションがあります。プロセスは、設定された時間にAlarmManagerとして実行されます。すべて正常に動作しますが、理想的には、ユーザーがアプリケーションをアクティブに使用しているときにユーザーに通知されないようにします。つまり、AlarmManagerは基本的に一時停止する必要があります。私が考えることができる唯一の解決策は、次のようなメインアクティビティのonResumeメソッドでアラームを常に開始/停止することです。

@Override
public void onResume()
{ 
      AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
      Intent myIntent = new Intent(this, AlarmReceiver.class);
      PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, myIntent, 0);
      alarmManager.cancel(pendingIntent);
      alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 600000, 600000, pendingIntent);
}

これは絶対確実ではありませんが、私が考えることができる最善の解決策です。それが悪い習慣なのか、それとももっと良い解決策があるのか​​疑問に思っていますか?ありがとう。

4

1 に答える 1

0

AlarmReceiver(またはAlarmReceiverが呼び出すサービス)に、アプリが表示されているかどうかを確認してもらいます。アプリとAlarmReceiver/Serviceの間で状態を共有する必要があります。onResume中にフォアグラウンドにあり、onPause中にバックグラウンドにあるAlarmReceiver/Serviceに通知する基本アクティビティを持つことができます。次に、AlarmReceiver / Serviceは、アラームが鳴ったときにこの状態を確認し、それを使用して通知を表示するかどうかを決定できます。

于 2011-09-15T00:01:36.447 に答える