【问题标题】:How to set alarm for every 10 minutes in Android Application in 9 and 12?如何在 9 和 12 的 Android 应用程序中每 10 分钟设置一次闹钟?
【发布时间】: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


【解决方案1】:

当您在 AlarmReceiver 中收到消息时,您可能必须取消先前的警报。我有同样的问题,如果我收到上一个警报的消息,我会取消它,然后我可以创建新的。

private void cancelAlarm(){  
        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, PendingIntent.FLAG_UPDATE_CURRENT);
        }
        AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        alarm.cancel(pintent);
        pintent.cancel();
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多