Тревога без обслуживания

#android #alarmmanager #android-alarms

#Android #alarmmanager #android-сигналы тревоги

Вопрос:

Я хочу планировать сигналы тревоги без необходимости использования a Service , я просто хочу запланировать их из своего приложения при его запуске.

У меня есть этот код в моем Application :

 public void onCreate() {
    super.onCreate();
    Context context = getApplicationContext();

    alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, Alarm.class);
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

    alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            10 * 1000,
            10 * 1000, alarmIntent);
}
 

и это мой Alarm класс:

 public class Alarm extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Alarm!");
    }
}
 

Я также добавил <receiver android:process=":remote" android:name=".Alarm"></receiver> в манифест, но тревога никогда не срабатывает. Я что-то упустил или мне нужно использовать Service ?

Обновление: я переместил код из основного Application в основной Activity . Тем не менее, тревоги нет.

Комментарии:

1. вы можете проверить этот документ для получения дополнительной информации: developer.android.com/training/scheduling/alarms.html

2. Вы уверены, что ваш Application код запущен? Есть ли у вас <receiver> в нужном месте в манифесте? Ваш приемник запущен в отдельном процессе. Есть ли у вас фильтр в вашем logcat, который пропускает эту печать журнала?

3. @MikeM. Да, я ставлю точку останова как при установке будильника, так и при его получении в Alarm классе. <receiver> В манифесте находится <manifest> тег.

4. Ну, на Android 5.1 вы не можете использовать AlarmManager периоды опроса менее одной минуты. Я серьезно надеюсь, что попытка выполнять работу каждые 10 секунд предназначена только для временного тестирования. Помимо этого, используйте adb shell dumpsys alarm , чтобы узнать, запланирован ли ваш будильник. Обратите внимание, что «неточный» характер setInexactRepeating() означает, что dumpsys время для вашего будильника не будет точным.

5. Он <receiver> должен быть внутри <application> тегов. Кроме того, что сказал CommonsWare, но я думаю, что он должен сработать хотя бы один раз, довольно быстро.