我想在某个时间关闭一个活动。是否可以使用 AlarmManager 关闭此活动?
问问题
216 次
2 回答
0
我建议您接收广播作为警报的响应,并将广播发送到活动中的非静态接收器,如果用户在活动中,它将收到它并在 onReceive 命中完成
编辑:
我的意思是使用静态 BroadcastReceiver 来接收 AlarmManager 广播。所述接收器将向 BroadcastReceiver 的动态实例发送广播(它将在 onStart 上侦听并在 onStop 上停止)。这样做的原因是,即使 Activity 不在前台甚至不存在(用户在警报发生之前退出应用程序),AlarmManager 回调也会调用,因此是静态 BroadcastReceiver。如果用户没有退出应用程序,那么动态分配的 BroadcastReceiver 就会到位。动态分配接收器的 onReceive 方法将调用ActivityName.this.finish()
以实际销毁当前活动。阅读有关BroadcastReceiver的更多信息,finish()
于 2013-11-05T12:06:05.483 回答
0
我还没有尝试完成一项活动,但我确信它有效。
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
于 2013-11-05T15:33:17.340 回答