7

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

例如,如果我想将警报设置为每 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);
}

我的广播接收器类没有被调用,我不确定我使用的“setRepeating()”方法设置是否正确..

请帮忙!

4

4 回答 4

6

使用此代码

  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 android:name=".AlarmBroadcastReceiver" >
        </receiver>
于 2013-07-18T08:27:11.243 回答
2

使用setInexactRepeating()而不是setRepeating()。当您使用setInexactRepeating()时,Android 会同步来自多个应用程序的重复警报并同时触发它们。

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

请注意,虽然setInexactRepeating()是对setRepeating( )的改进,但如果应用程序的每个实例大约在同一时间访问服务器,它仍然可能使服务器不堪重负。因此,对于网络请求,为您的警报添加一些随机性

于 2018-05-19T17:11:09.603 回答
-1

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

am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
    AlarmManager.INTERVAL_DAY, pi);
于 2013-07-18T08:20:36.797 回答
-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);
于 2016-07-15T08:57:44.297 回答