为什么我的Android AlarmManager代码无法正常工作?

时间:2016-06-22 16:11:56

标签: android alarmmanager

我的应用中发出警报:

public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState){
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.curentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 11);
        calendar.set(MINUTE, 11);

        Intent intent = new Intent(this, AlarmReceiver.class);
        PendingIntent pendingIntent = Pending.getBroadcast(this, 0, intent, 0);

        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntente);
    }
}

这是我的AlarmReceiver.class

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent){
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        System.out.println("ALARM: " + sdf.format(new Date()));
    }
}

在我的AndroidManifest.xml中,我有这一行

<receiver android:name=".main.AlarmReceiver" />

问题是警报在我设定的时间内没有发出警报。我为

设置闹钟
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(MINUTE, 5);

然后警报在11:11:29发出警报。然后我为

设置闹钟
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(MINUTE, 20);

然后警报在11:26:29发出警报。然后我为

设置闹钟
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(MINUTE, 29);

然后警报在11:41:29发出警报。

整个上午都是这样。但是,如果我替换这一行

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntente);

这一行

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, (SystemClock.elapsedRealtime()+10000), pendingIntent);

然后警报在适当的10秒内完美报警。

发生了什么事?

1 个答案:

答案 0 :(得分:1)

根据文档,setInexactRepeating在设计上并不准确。为了通过多次唤醒设备来减少电池消耗,它会在内部尝试同时触发多个警报,从而导致某些客户的警报时间不准确。 https://developer.android.com/reference/android/app/AlarmManager.html#setInexactRepeating(int,%20long,%20long,%20android.app.PendingIntent)

相关问题