【发布时间】:2022-09-30 20:55:20
【问题描述】:
我想设置一个重复警报,在 android 8 或 9 中它可以工作。 问题是如何设置它在 12 与 android 8 并行工作?
这是在主要活动中,我设置了一个 startAlarm,并且缺少在 sdk >= 31 的情况下如何设置警报的部分。当我启动 android 进行测试时,它会在应用程序开始时发送通知,但它以后不要发送通知。
MainActivity.java:
private void startAlarm(long when) {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (alarmManager.canScheduleExactAlarms()) {
Log.e(TAG, \"startAlarm: canScheduleExactAlarms\");
}
}
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 1, intent,
PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
} else {
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 1, intent, 0);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
when*1000,
pendingIntent
);
} else {
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
when*1000,
pendingIntent
);
}
}
我将 AlarmReceiver 设置为发送通知。 报警接收器:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationHelper notificationHelper = new NotificationHelper(context);
NotificationCompat.Builder nb = notificationHelper.getChannelNotification();
notificationHelper.getManager().notify(1, nb.build());
long timeInSec = System.currentTimeMillis() / 1000;
Settings.setLastNotificationSent(timeInSec, context);
}
}
我在清单中设置了权限。 安卓清单:
<uses-permission android:name=\"com.android.alarm.permission.SET_ALARM\"/>
<uses-permission android:name=\"android.permission.SCHEDULE_EXACT_ALARM\"/>
<receiver android:name=\".receiver.AlarmReceiver\"
android:exported=\"true\"
android:enabled=\"true\">
<intent-filter>
<action android:name=\"android.intent.action.BOOT_COMPLETED\" />
</intent-filter>
</receiver>
-
你找到解决方案了吗?
标签: java android alarmmanager android-alarms repeatingalarm