如何在退出应用程序后5分钟开始活动?

时间:2015-04-09 13:01:16

标签: android

我正在寻找一种关于如何制作警报的解决方案,在退出应用程序后,它将启动一项新活动(如果用户选择,则为十分钟)。这只是一次不重复。

我查看了TimerTask和Handlers,但它们似乎只在应用程序位于前台时才起作用。 AlarmManager看起来可以完成这项工作,但我不知道如何处理。有什么建议吗?

EDIT1: 这就是我在MainActivity中所拥有的:

Intent intent = new Intent("wake_up");
    intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, 5000, pendingIntent);

这是BroadcasReceiver:

 @Override
public void onReceive(Context context, Intent intent) {
    Intent i = new Intent();
    i.setClassName("(packagename)", "(whole class name)");
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}

我是如何在Manifest中注册的(和其他活动一样):

<receiver
        android:name="FakeCallBroadcastReceiver" >
    </receiver>

我已经在BroadcastReceiver中放置Toast并且它可以工作,但它会立即出现 - 将时间从5000更改为让10000说不会改变任何内容。

2 个答案:

答案 0 :(得分:3)

onCreate()实例或主Application中的Activity方法中添加此内容:

Intent intent = new Intent("wake_up");
intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, intent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 5000, pendingIntent);

并在Activity中启动BroadcastReceiver

public class AlarmReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
       context.startActivity(...);
   }
}

使用意图过滤器注册BroadcastReceiver

<receiver android:name="AlarmReceiver">
    <intent-filter>
        <action android:name="wake_up" />
    </intent-filter>
</receiver>

答案 1 :(得分:2)

警报管理器绝对是最佳选择。您需要有一个广播接收器来接收警报,然后在该接收器中设置待处理的意图。

正如您所提到的,TimerTask和Handlers在这里对您没有多大帮助。

使用广播接收器的最简单方法是将其作为广播接收器注册在Android清单中。您也可以手动注册它们,但从概念上讲它有点难度。

玩得开心!