特定の時間に活動を終了したい。AlarmManager を使用してこのアクティビティを閉じることはできますか?
2 に答える
アラームからの応答としてブロードキャストを受信し、ユーザーがアクティビティにいる場合はブロードキャストを非静的レシーバーに送信し、onReceive ヒット フィニッシュでブロードキャストを送信することをお勧めします。
編集:
私が意味したのは、静的な BroadcastReceiver を使用して AlarmManager ブロードキャストを受信することでした。上記のレシーバーは BroadcastReceiver の動的インスタンスにブロードキャストを送信します (onStart でリッスンし、onStop で停止します)。これを行う理由は、Activity がフォアグラウンドにない場合や存在する場合でも (アラームが発生する前にユーザーがアプリを終了した場合)、AlarmManager コールバックが呼び出されるためです。したがって、静的 BroadcastReceiver. ユーザーがアプリを終了しなかった場合は、動的に割り当てられた BroadcastReceiver が配置されます。動的に割り当てられたレシーバーの onReceive メソッドはActivityName.this.finish()
、現在のアクティビティを実際に破棄するために呼び出すメソッドです。BroadcastReceiver、finish()の詳細を読む
アクティビティを終了して試したことはありませんが、うまくいくと確信しています。
BroadcastReceiver br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
this.finish();
Log.i(TAG," get activity-reference --> this ");
}
};
context.getApplicationContext().registerReceiver(br, new IntentFilter("com.cocus.panicbutton.anotherbroadcast") );
PendingIntent pi = PendingIntent.getBroadcast( context.getApplicationContext(), 0, new Intent("com.cocus.panicbutton.anotherbroadcast"),0 );
AlarmManager am = (AlarmManager)(context.getApplicationContext().getSystemService( Context.ALARM_SERVICE ));
Log.i(TAG,"receiver registered");
// starting the Alarm-Timer
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() +2*1000, pi);
// 2*1000 = 2 seconds