Android - Открывать приложение по указанному c времени ежедневно - PullRequest
0 голосов
/ 24 марта 2020

У меня есть приложение с pu sh на основе сокетов, чтобы приложение открывало и показывало пользователю важную работу, такую ​​как получение заказов в магазине. У меня есть требование бить тревогу за 10 минут до того, как магазин выходит в интернет ежедневно. Я решил, что go впереди с AlarmManager, как показано ниже

Calendar alarmFor = Calendar.getInstance();
alarmFor.set(Calendar.HOUR_OF_DAY, 7);
alarmFor.set(Calendar.MINUTE, 45);
alarmFor.set(Calendar.SECOND, 0);

Intent MyIntent = new Intent(getApplicationContext(), BroadcastNotification.class);
PendingIntent MyPendIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, 
MyIntent, PendingIntent.FLAG_CANCEL_CURRENT);

AlarmManager MyAlarm = (AlarmManager) getSystemService(ALARM_SERVICE);
MyAlarm.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmFor.getTimeInMillis(), 
MyPendIntent);

, а затем в onRecieve () откроет приложение, как показано ниже, со звуком

@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyAPP", "onReceive() called");
// -> open app activity with alarm sound 
}

Но указанное решение кажется довольно старой школой.

Я также пытался с WorkManager OneTimeRequest установить и запустить задание в указанное c время. Но в Android Daily Job-Evernote упоминается, что WorkManager не гарантирует работу в определенное время c, а также ежедневную работу .

. предложить лучший и унифицированный подход к открытию приложения с гарантией в указанное c время.

Заранее спасибо.

1 Ответ

1 голос
/ 24 марта 2020

AlarmManager также не будет работать. Режим бездействия предотвращает это (или, скорее, он выключится go, но может опоздать на 15 минут). У вас есть два варианта:

1) Не используйте веб-сокеты. Используйте FCM. FCM позволяет отправлять высокоприоритетное сообщение pu sh, которое разбудит устройство.

2) Попросите пользователя внести белый список из режима Doze. Это не может быть сделано программно (самое большее, что вы можете сделать, это запустить страницу настроек, чтобы сделать это). Это должно быть сделано пользователем вручную.

Я действительно рекомендую # 1, если вы хотите сквозную систему. # 2 и требование пользователя что-то делать вне приложения всегда немного ненадежно, и многие пользователи не будут этого делать.

...