我正在寻找一种关于如何制作警报的解决方案,在退出应用程序后,它将启动一项新活动(如果用户选择,则为十分钟)。这只是一次不重复。
我查看了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说不会改变任何内容。
答案 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清单中。您也可以手动注册它们,但从概念上讲它有点难度。
玩得开心!