在Android中每20分钟重复一次闹钟

时间:2019-05-21 18:08:43

标签: android android-alarms

我想每20分钟重复一次闹钟。 所以我尝试了:

清单:

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

AlarmReceiver.class

    public class AlarmReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
                Intent intent2 = new Intent(context, MainActivity.class);
                showNotification(context, "text", "text", intent2);

                Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                Ringtone r = RingtoneManager.getRingtone(context, notification);
                r.play();
        }

@TargetApi(Build.VERSION_CODES.N)
    public void showNotification(Context context, String title, String body, Intent intent) { 

... 

} 

   }

在我的主要活动中:

AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
        Calendar time = Calendar.getInstance();
        time.setTimeInMillis(System.currentTimeMillis());
        time.add(Calendar.SECOND, 1200);
        alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);

它仅在第一次工作。我想让它重复播放,即使应用程序没有打开,有什么想法吗?

3 个答案:

答案 0 :(得分:2)

从KitKat(API 19)开始,所有警报都是 inexact ,这意味着系统将在相似的时间将警报分批处理。如果需要准确的时间安排,可以使用不同的API。从棉花糖开始,更复杂的事情开始了,Android引入了Doze的概念,该概念进一步限制了事物何时/如何唤醒设备。您仍然可以使用精确的警报,但是需要使用在空闲(打ze)时间内允许它使用的API:https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html#available。请记住,当闹钟响起时,您可能会在“打ze”窗口中,并且您的应用将受到限制,无法执行何种操作。

答案 1 :(得分:1)

请尝试以下操作,每隔20分钟重复一次警报

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(),1000 * 60 * 20, pendingIntent);

答案 2 :(得分:0)