如何在Android 6.0中设置重复闹钟

3

我正在使用setExactAndAllowWhileIdle()来设置闹钟。但它只能工作一次。我该如何设置每天间隔1天的重复闹钟? 在API Level 23之前,setInexactRepeating方法可以正常工作。


它在API中说明了...您必须手动重复警报。这意味着,如果警报出现,请像第一次设置一样自己设置新警报。 - Opiatefuchs
@Ankur,你成功完成了吗? - devgeek
我正在手动完成它。@devgeek - Ankur Khandelwal
请问您能否分享一下手动操作的方式?@AnkurKhandelwal - devgeek
2个回答

2

当广播接收器事件正在执行时,重新充电您的警报。

我的意思是,

public class CustomBroadcast extends WakefulBroadcastReceiver {
    public static final String somekey = "somekey.somekey.somekey";
    @Override
    public void onReceive(Context ctx, Intent intent) {
        // TODO Auto-generated method stub
        ComponentName comp = new ComponentName(ctx.getPackageName(),
        YourSevice.class.getName());
        YourCustomClass.yourrechargefunction();
        startWakefulService(ctx, intent.setComponent(comp));
    }
}

public class YourCustomClass {
    private final static int somekey_int = anynumber;
    public static void yourrechargefunction() {
        Intent intent = new Intent(CustomBroadcast.somekey):
        PendingIntent pi = wPendingIntent.getBroadcast(ctx,somekey_int, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, nexttime, pi);
    }
}

0

AlarmManager.setRepeating 在不同的 Android 版本上工作不正常。

尝试使用 setExact。它不会重复,但可以通过下面提到的方式实现重复功能:

更新后的 AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        context.sendBroadcast(new Intent("SERVICE_TEMPORARY_STOPPED"));

        long repeatCount = PreferenceManager.getDefaultSharedPreferences(context).getLong("REPEAT_COUNT", 0L);

        repeatCount++;

        PreferenceManager.getDefaultSharedPreferences (context).edit().putLong("REPEAT_COUNT", repeatCount).apply()

        AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Intent alarmIntent = new Intent(this, AlarmReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
        manager.setExact(AlarmManager.RTC_WAKEUP, (repeatCount *System.currentTimeMillis()),pendingIntent);
    }
}

在这里,我们维护一个repeatCount和变量(基于首选项),并在AlarmReceiver中递增它,并通过计算nextAlarmTime来再次安排闹钟,使用repeatCount * System.currentTimeMillis();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接