0

我想在某个时间关闭一个活动。是否可以使用 AlarmManager 关闭此活动?

4

2 回答 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 回答