Имеется приложение, часть которого работает по типу будильника.
Задача: в определённый момент времени, несмотря ни на что вывести устройство из спящего режима и запустить Activity.
Алгоритм построен с использованием alarmManager.
Так заводится будильник:
//Работа с Intent для запуска AlarmReciver
final Intent my_intent = new Intent(getActivity().getApplicationContext(), AlarmRecever.class);
//Устанавливаем время, на которое нужно завести (Время сейчас + 10 секунд)
TimeAlarm = SystemClock.elapsedRealtime() + (10 * 1000);
//Работа с Pending Intent
pendingIntent = PendingIntent.getBroadcast(getContext(), 0, my_intent, PendingIntent.FLAG_UPDATE_CURRENT);
//Работа с Alarm Manager
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, TimeAlarm, pendingIntent);
Это код для AlarmReciver, который запускает Activity SignalActivity:
public class AlarmRecever extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Intent intentSignal = new Intent(context, SignalActivity.class);
intentSignal.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName komponent = intentSignal.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(komponent);
context.startActivity(mainIntent);//Запускаем Activity "intentSignal"
}
}
Проблема возникает не всегда, но бывает в ≈10% случаев.
Проблема заключается в том, что, когда экран выключен, устройство не всегда выходит из спящего режима. То есть Activity запускается только тогда, когда пользователь разбудит смартфон (нажмёт например HomeButton).
Когда же устройство подключено к компьютеру, то такой проблемы ещё ни разу не возникало.
В manifest'e прописал:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
Могу предположить, что проблема в том, что устройство бывает загруженным и ему не хватает ресурсов на запуск Activity. Вероятно нужно как-то изменить приоритет.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости