首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AlarmManager setRepeating()

AlarmManager setRepeating()
EN

Stack Overflow用户
提问于 2013-07-18 16:16:59
回答 4查看 29.2K关注 0票数 7

我的程序被设计成创建一个重复的警报,触发一个广播接收器,依次发出通知。使用用户输入的时间间隔重复报警。

例如,如果我想要将闹钟设置为每10秒运行一次,我该如何做?

代码语言:javascript
复制
 am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),  10000, calpendingintent);

是这样的吗?我的广播接收器也因为某些原因没有被调用。

代码语言:javascript
复制
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()“方法是否设置正确。

请帮帮我!

EN

回答 4

Stack Overflow用户

发布于 2013-07-18 16:27:11

使用此代码

代码语言:javascript
复制
  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);

              }
        }

您想要停止报警吗

代码语言:javascript
复制
public void stopAlarmManager()
{          
    if(alarmMgr != null)
       alarmMgr.cancel(pendingIntent);
}

记住不要忘记在清单文件中注册接收者

代码语言:javascript
复制
  <receiver android:name=".AlarmBroadcastReceiver" >
        </receiver>
票数 6
EN

Stack Overflow用户

发布于 2018-05-20 01:11:10

使用setInexactRepeating()而不是setRepeating().当你使用setInexactRepeating(),时,安卓可以同步来自多个应用的重复警报,并同时触发它们。

这减少了系统必须唤醒设备的总次数,从而减少了电池消耗。从Android 4.4 (API级别19)开始,所有重复的警报都是不准确的。

请注意,虽然setInexactRepeating()是对setRepeating(),的改进,但如果应用程序的每个实例几乎在同一时间访问服务器,它仍然可以压倒服务器。因此,对于网络请求,请在警报中添加一些随机性

票数 2
EN

Stack Overflow用户

发布于 2013-07-18 16:20:37

你可以用这个。希望它能解决你的问题

代码语言:javascript
复制
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
    AlarmManager.INTERVAL_DAY, pi);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17718154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档