#android #broadcastreceiver #alarm
#Android #broadcastreceiver #тревога
Вопрос:
Я настраиваю ежедневный будильник. Это работает, если приложение запущено во время будильника, но не работает, если приложение не запущено. Вот как я объявляю получателя в манифесте:
<receiver android:name="com.myAppPackage.alarm.AlarmReceiver"
android:enabled="true"
android:exported="true"/>
Studio предупреждает меня: экспортированный приемник не требует разрешения.
Правда, я не добавил android: permission nor и Intent к получателю, и в разделе приложения нет никаких тегов разрешений.
И это broadcastreceiver:
package com.myAppPackage.alarm;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver(){}
@Override
public void onReceive(Context context, Intent intent) {
final Intent syncIntent = new Intent(context, AlarmActivity.class);
syncIntent.addFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(syncIntent);
}
}
Тревога настраивается следующим способом (в этом примере настроен на ежедневное неточное отключение в 13:48):
public static void configureDailySync(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
final int hourOfDay = 13;
final int minuteOfHour = 48;
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minuteOfHour);
alarmManager.setInexactRepeating(
AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY,
alarmPendingIntent);
}
Любая помощь приветствуется! Спасибо!!
новости: все ближе… если я скопирую код настройки будильника в метод MainActivity onCreate(), это сработает! Это код, который я скопировал:
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this, AlarmReceiver.class);
PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
final int hourOfDay = 13;
final int minuteOfHour = 48;
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minuteOfHour);
alarmManager.setInexactRepeating(
AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY,
alarmPendingIntent);
Когда тревога создается, как указано выше, в onCreate() MainActivity, она срабатывает, даже когда приложение закрыто…
Но когда я вызываю вызов метода из MainActivity следующим образом:
MyAppAccount.configureDailySync(this);
это не работает!
MyAppAccount — это простой класс, который ничего не расширяет… Я пытался заставить MyAppAccount расширить AppCompatActivity на случай, если это имело значение, но ничего…
Ну что ж … похоже, что приведенная выше попытка выполнить настройку будильника в методе onCreate() MainActivity не всегда работает… что больше всего озадачивает !!! :- (
Комментарии:
1. вы пробовали, что происходит, когда вы помещаете configureDailySync() в класс приложения?
Ответ №1:
РЕШАЕМАЯ: Это не имело никакого отношения к кодированию!! Проблема заключалась в том, как я закрывал приложение. При закрытии приложения с помощью кнопки остановки Android Studio тревога НЕ устанавливается. При закрытии приложения с телефона, например, с помощью кнопки «Назад» и / или удалении приложения из списка приложений (с помощью квадратной кнопки), тогда срабатывает будильник!
Почему? Понятия не имею…
Комментарии:
1. 5 часов поиска. СПАСИБО, ЧУВАК