我想每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);
它仅在第一次工作。我想让它重复播放,即使应用程序没有打开,有什么想法吗?
答案 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)
尝试使用android worker manager,因为它也与打ze模式一起使用。 https://developer.android.com/reference/androidx/work/PeriodicWorkRequest#min_periodic_interval_millis
https://developer.android.com/reference/androidx/work/PeriodicWorkRequest