Я разработчик двух приложений будильника в Google Play. Я пытаюсь заставить их работать с Android 6.0. Тем не менее, режим Doze делает так, чтобы они не звонили. Я поместил их в белый список, я поместил значок уведомления переднего плана, я не уверен, что еще я могу сделать - когда в режиме Doze тревоги Alarm Manager по-прежнему игнорируются. Однако приложение Clock (которое является Google Play, а не AOSP-приложение) отличается. Когда будильник включен в приложении "Часы", "шаг adb deviceidle" всегда будет читать "активный" и никогда не "простаивает", "idle_pending" или что-то еще.
Является ли Android читер здесь, давая его собственное приложение больше мощности, ака. "потянув яблоко"? Неужели все приложения для будильника в Google Play стали неработоспособными? Вид беспокоит здесь, это качественные приложения, каждый из которых занимает год неполного времени разработки, и для меня большие источники дохода. Любые подсказки о том, как я могу заставить их работать, будут огромной помощью.
Настройка назначения AlarmManager:
Intent intent = new Intent(context, ReceiverAlarm.class);
if (android.os.Build.VERSION.SDK_INT >= 16) {
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
}
amSender = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT); //FLAG_CANCEL_CURRENT seems to be required to prevent a bug where the intent doesn't fire after app reinstall in KitKat
am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, scheduleToTime+1, amSender);
и класс ReceiverAlarm:
public class ReceiverAlarm extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (wakeLock == null) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Theme.appTitle);
wakeLock.acquire();
}
X.alarmMaster.startRingingAlarm(true);
}
и соответствующие части метода X.alarmMaster.startRingingAlarm():
if (wakeLock == null) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Theme.appTitle);
wakeLock.acquire();
}
if (screenWakeLock == null) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
screenWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, Theme.appTitle+" scr");
screenWakeLock.acquire();
}
Intent alarmIntent = new Intent(Intent.ACTION_VIEW);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
alarmIntent.setClass(context, ActivityAlarmAlarm.class);
context.startActivity(alarmIntent);
Некоторые из методов были вставлены в ряд для упрощения чтения.