我的程序旨在创建一个重复警报,触发广播接收者依次发出通知。使用用户输入的间隔重复警报。
例如,如果我想将警报设置为每10秒运行一次,我该怎么做?
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10000, calpendingintent);
这是对的吗?我的广播接收器由于某种原因没有被调用。
public static void createAlarms(Context mcontext) {
cal = Calendar.getInstance();
cal.add(Calendar.HOUR, alarmintervalint);
calintent = new Intent(mcontext, AlarmBroadcastReceiver.class);
calpendingintent = PendingIntent.getBroadcast(mcontext.getApplicationContext(), 12345, calintent, 0);
am = (AlarmManager)mcontext.getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10000, calpendingintent);
}
我的broadcastreceiver类没有被调用,我不确定" setRepeating()"我使用的方法设置正确..
请帮忙!
答案 0 :(得分:5)
使用此代码
AlarmManager alarmMgr;
PendingIntent pendingIntent;
public void startAlarmManager()
{
Intent dialogIntent = new Intent(getBaseContext(), AlarmBroadcastReceiver.class);
alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
pendingIntent = PendingIntent.getBroadcast(this, 0, dialogIntent,PendingIntent.FLAG_CANCEL_CURRENT);
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 10000, pendingIntent);
}
}
是否要停止闹铃
public void stopAlarmManager()
{
if(alarmMgr != null)
alarmMgr.cancel(pendingIntent);
}
记住,不要忘记在清单文件中注册Receiver
<receiver android:name=".AlarmBroadcastReceiver" >
</receiver>
答案 1 :(得分:0)
使用 setInexactRepeating()代替 setRepeating()。当您使用 setInexactRepeating()时,Android会同步来自多个应用的重复警报并同时触发它们。
这减少了系统必须唤醒设备的总次数,从而减少了电池的耗电量。从Android 4.4(API级别19)开始,所有重复警报都是不准确的。
请注意,虽然 setInexactRepeating()是对 setRepeating()的改进,但如果应用的每个实例都在同一时间点击服务器,它仍然可能会淹没服务器。因此,对于网络请求,请为警报添加一些随机性
答案 2 :(得分:-1)
请使用此。希望它能解决你的问题
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
AlarmManager.INTERVAL_DAY, pi);
答案 3 :(得分:-1)
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 30);
long time = cal.getTimeInMillis();
Intent i = new Intent(G.context, BootCompleteReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(G.context, 0, i, 0);
G.alarmManager.set(AlarmManager.RTC_WAKEUP, time, pi);