PendingIntent被解雇时有没有办法杀死一个活动?

时间:2013-03-13 07:28:47

标签: android android-activity alarmmanager android-pendingintent

在Android中杀死某项活动,您只需使用finish()即可。但在我的情况下,我希望在PendingIntent被解雇时终止活动。

我的代码如下:

Intent intent = new Intent(MainActivity.this, NextActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Utils.KEY_RECORD_TIME, recordLength);

PendingIntent pintent = PendingIntent.getActivity(MainActivity.this,
        piNumber, intent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent);

如果我在finish()下方添加AlarmManager,则活动将在{{1}}中设置的时间之前被杀死。

我希望活动一直可见,直到时间结束并杀死它。有没有办法做到这一点?我在Stack Overflow,Google做了一些搜索,但找不到答案。

3 个答案:

答案 0 :(得分:2)

您可以在活动中动态注册BroadcastReceiver。使用待定意图,您可以使用getBroadcast()。因此,当警报管理器调用广播接收器时,您可以在广播接收器内调用finish()。请注意,当您不再需要时,必须取消注册接收器,例如,您在onDestroy()中执行此操作。

答案 1 :(得分:2)

在计时器内,您可以获得待处理意图的时间延迟。

    new Timer().schedule(new TimerTask() {

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
},pending intent delay);

请试一试。这对我有用

答案 2 :(得分:1)

看看onNewIntent(Intent)。如果您可以将活动作为单个顶部开始,那么您的实例应该通过该调用接收待处理的意图。

如果您无法使用singel top,并且正在启动活动的新实例,则可以使用共享静态来获取新实例onCreate()中的原始实例finish()两者。