我在应用启动时从MainActivity运行以下警报。我想我已经将它编程为在每次新的应用程序启动时覆盖自己。但我发现很难测试。这真的是压倒一切吗?如果我关闭并打开应用程序很多次我会收到很多警报吗?
如何测试我创建的警报数量?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, AlarmBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.setRepeating(AlarmManager.RTC_WAKEUP, 5000, 60000, pendingIntent);
}
所以PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)
requestCode
是? (我假设为警报设置了一个ID,您可以使用新的警报覆盖它)flags
呢? (告诉警报如果新警报具有相同的ID,该怎么办?)答案 0 :(得分:1)
是的,您覆盖它,因为每次创建活动时都使用相同的请求代码。请求代码是PendingIntent.getBrodacast()方法的第二个参数,并且操作类似于警报的id以便稍后更新它(对于例子取消它)。您可以使用以下代码检查您的闹钟是否已设置:
boolean alarmUp = (PendingIntent.getBroadcast(context, 0,
new Intent("com.my.package.MY_UNIQUE_ACTION"),
PendingIntent.FLAG_NO_CREATE) != null);
但是,您不需要使用您需要调用的代码设置警报:
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, 0 ,pendingIntent);
实际设置闹钟。
关于你的上一个问题,有几个选项可以使用标志:
int FLAG_CANCEL_CURRENT表示如果描述的标志 PendingIntent已经存在,应该取消当前的一个 在生成新的之前。
int FLAG_IMMUTABLE标志,指示创建的PendingIntent 应该是不可改变的。
int FLAG_NO_CREATE Flag>表明如果描述的话 PendingIntent尚不存在, 然后只返回null而不是创建它。
int FLAG_ONE_SHOT表示可以使用此PendingIntent的标志 只有一次。
int FLAG_UPDATE_CURRENT表示如果描述的标志 PendingIntent已经存在,然后保留它但替换其额外数据 与这个新意图中的内容。
答案 1 :(得分:0)
这是在特定时间内在Android中设置闹钟的方法:
Intent intent = new Intent(context, AlarmService.class);
final int _id = Integer.parseInt(""+MCZManagers.timeToMillies(alarmTime));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, _id, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, MCZManagers.dateTimeToMillies(alarmDateTime), pendingIntent);
一旦销毁应用程序,警报也会被破坏,不会再次播放。