2014-02-08 3 views
0

Я использую Android AlarmManger, чтобы запланировать запуск IntentService через небольшие промежутки времени.Android IntentService выполняется только один раз

Вот мой AlarmManger:

static void setNextSchedule(Context ctx, long interval){ 
     AlarmManager manager = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE); 
     Intent nIntent = new Intent(ctx, DService.class); 
     PendingIntent pIntent = PendingIntent.getActivity(ctx, 1, nIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     manager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
       SystemClock.elapsedRealtime() + interval, interval, pIntent); 

     Log.i(ScheduleAlarm.class.getSimpleName(), "Next alarm set"); 
    } 

И мой IntentService:

@Override 
    protected void onHandleIntent(Intent intent) { 
     Log.i(DService.class.getSimpleName(), "Service starting"); 

     ScheduleAlarm.setNextSchedule(getApplicationContext(), 15000); 
    } 

В настоящее время он просто держит код для тестирования. Теперь этот код будет работать без проблем после запуска приложения, но через 15 секунд он укажет, что служба запускается в логарифме, но код не будет выполняться.

Как получить услугу intenet выполнить код внутри onHandleIntent каждый раз, когда он запускается?

Благодаря

+0

«но код не будет исполнен» - что такое «код»? Как вы определили, что он «не выполнит»? Почему вы используете 'getActivity()' 'PendingIntent' для' Intent' для класса с именем 'DService'? – CommonsWare

+0

@CommonsWare - Вы правы, изменились на 'getService()', и теперь все работает отлично. Добавить как ответ, я соглашусь. спасибо – Wahtever

ответ

1

При использовании PendingIntent, фабричный метод должен соответствовать типу компонента, который ваш Intent для:

  • Если Intent указывает на активность, используйте getActivity()

  • Если ваш Intent указывает на обслуживание, используйте getService()

  • Если ваши Intent указывает на BroadcastReceiver, используйте getBroadcast()

  • Если Intent указывает ни один из выше, идите прямо в тюрьму, не проходят Go !, не собирают $ 200 :-)

Смежные вопросы