#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, но я думаю, что он должен сработать хотя бы один раз, довольно быстро.