Я пытаюсь настроить будильник, который будет запускаться в фоновом режиме и запускать (в конечном итоге) событие сохранения. На данный момент я просто привязываю этот код к кнопке. Нажмите кнопку, и будильник должен начать оставлять сообщения Toast позади как указание на то, что он функционирует. На данный момент все работает, за исключением того, что onReceive в BroadcastReceiver никогда не запускается.BroadcastReceiver не срабатывает по сигналу тревоги
Вот мой код:
Класс настройки будильника:
//FIXME - rename (ie BackgroundSave; more descriptive)
public class AlarmReceiver extends Service{
//FIXME - make sure you kill the service
public void onCreate() {
super.onCreate();
Toast.makeText(getApplication().getApplicationContext(), "Service onCreate called", Toast.LENGTH_SHORT).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplication().getApplicationContext(), "Service started", Toast.LENGTH_SHORT).show();
setAlarm(AlarmReceiver.this);
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
public void setAlarm(Context c) {
AlarmManager alarmManager = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(c, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(c, 0, i, 0);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis() + 1000, 1000, pi);
Toast.makeText(c.getApplicationContext(), "setAlarm called", Toast.LENGTH_SHORT).show();
}
public void cancelAlarm(Context context) {
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
Вот это BroadcastReceiver:
public class Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm", Toast.LENGTH_SHORT).show();
}
}
И вот мой манифест:
<!-- Alarm -->
<service android:name="com.xxxx.android.tools.AlarmReceiver" android:enabled="true" />
<receiver android:name="com.xxxx.android.tools.Alarm" ></receiver>
Тревога onReceive никогда не срабатывает.
Г-н Мориц, вот и все. Я ценю направление. Откуда вы столкнулись с этой информацией? Было ли это в API-интерфейсах где-то, и я замалчивал его (ужасная привычка, которую мне нужно и нужно сломать). Что касается AlarmManager, то он запускается только тогда, когда пользователь не может сохранить свой контент из-за сетевых проблем. Я надеюсь, что это запустится в фоновом режиме, сохраните, когда сеть будет доступна, а затем выключится. Я буду исследовать Handler.postAtTime(). Опять же, я ценю помощь. –
Отлично. Подумайте о принятии ответа. :) Подробности для флага можно найти в javadocs: http://developer.android.com/reference/android/app/AlarmManager.html#ELAPSED_REALTIME_WAKEUP – Moritz