有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java“报警管理器设置重复”在1分钟内没有重复?

我正在尝试使用alarm manager设置后台服务

  Intent alarmIntent = new Intent(this, AlarmReceiver.class);
    PendingIntent pending = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.cancel(pending);
    //alarmManager.SetExact(AlarmType.RtcWakeup, SystemClock.ElapsedRealtime() + 5 * 1000, pendingIntent);
    alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime()+15*1000  , 15*1000, pending);

但它不是每15秒工作一次。有时在20秒后工作,有时在1分钟后工作。但是,当我设置1分钟(60*1000)时,它也不是精确的时间。很近。(1分4秒,1分13秒)为什么会这样


共 (1) 个答案

  1. # 1 楼答案

    自API 19以来,重复报警在默认情况下是不准确的

    解决方法是在x秒内设置一个简单的精确报警,然后在触发报警时递归设置另一个报警。这个密码对我来说很有用。此外,您只需在XML中定义服务:

    <receiver android:name=".AlarmReceiver" android:process=":remote" />
    

    从主要活动开始,你可以这样开始:

    AlarmReceiver alarm = new AlarmReceiver();
    alarm.setAlarm(this);
    

    安排报警的服务与接收报警的服务相同:

    public class AlarmReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            setAlarm(context);
            //Put whatever you want to do below here
        }
    
        public void setAlarm(Context context)
        {
            AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
            Intent i = new Intent(context, AlarmReceiver.class);
            PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
            am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis()/1000L + 5L) *1000L, pi); //Next alarm in 5s
        }
    }