AlarmManager, BroadcastReceiver и Service не работают

Я рефакторирую код, чтобы мое приложение получало данные с веб-сайта один раз в день в заданное время. Из моих исследований кажется, что AlarmManager является наиболее подходящим подходом.

Учебник, который я изучал, выглядит так: http://mobile.tutsplus.com/tutorials/android/android-fundamentals-downloading-data-with-services/

Пока что AlarmManager и BroadcastReceiver , похоже, работают, однако служба никогда не запускается (например, onStartCommand , похоже, не вызывается)

Вот важные фрагменты кода, который у меня есть:

MyActivity.java

private void setRecurringAlarm(Context context) {
    Calendar updateTime = Calendar.getInstance();
    updateTime.setTimeZone(TimeZone.getDefault());
    updateTime.set(Calendar.HOUR_OF_DAY, 20);
    updateTime.set(Calendar.MINUTE, 30);

    Intent downloader = new Intent(context, AlarmReceiver.class);
    downloader.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, downloader, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    // should be AlarmManager.INTERVAL_DAY (but changed to 15min for testing)
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent); 
    Log.d("MyActivity", "Set alarmManager.setRepeating to: " + updateTime.getTime().toLocaleString());
}

AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent dailyUpdater = new Intent(context, MyService.class);
        context.startService(dailyUpdater);
        Log.d("AlarmReceiver", "Called context.startService from AlarmReceiver.onReceive");
    }
}

MyService.java

public class MyService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("MyService", "About to execute MyTask");
        new MyTask().execute();
        return Service.START_FLAG_REDELIVERY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    private class MyTask extends AsyncTask {
        @Override
        protected boolean doInBackground(String... strings) {
            Log.d("MyService - MyTask", "Calling doInBackground within MyTask");
            return false;
        }
    }
}

AndroidManifest.xml


    ...
    
    

Когда я запускаю setRecurringAlarm в MyActivity , журнал печатается, как ожидалось, аналогично каждые 15 минут появляется журнал из AlarmReceiver . Однако я никогда не вижу журнал из MyService : (

Пример того, что я вижу в журналах:

DEBUG/MyActivity(688): Set alarmManager.setRepeating to: Jan 29, 2012 8:30:06 PM
DEBUG/AlarmReceiver(688): Called context.startService from AlarmReceiver.onReceive
DEBUG/AlarmReceiver(688): Called context.startService from AlarmReceiver.onReceive

Кажется, не могу понять, что я сделал неправильно - мое понимание из Android Dev Docs - это то, что находится в AlarmReceiver , когда я вызываю context.startService (dailyUpdater) , который, в свою очередь, должен вызывать onStartCommand в MyService , хотя, похоже, это не так!

Что я делаю не так, из-за чего MyService не запускается вообще?

13
задан pyko 29 January 2012 в 12:44
поделиться