Запускать службу каждые несколько секунд

Я хочу запустить службу при подключении к сети Wi-Fi.

Если я запускаю службу при подключении Wi-Fi, используя

context.startService(intent_alarm);

это работает нормально.

Я хочу запускать службу каждые 10 секунд после получения трансляции. Поэтому я использовал AlarmManager.

Вот код:

public class NetworkChangeReceiver extends BroadcastReceiver{
        public static AlarmManager am;
        public static PendingIntent sender;
      @Override
         public void onReceive(final Context context, final Intent intent) {
                 Intent intent_alarm = new Intent(context, MyService.class);
                    sender = PendingIntent.getBroadcast(context, 0, intent_alarm, 0);
                    am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                    long l = System.currentTimeMillis();
                    l += 3600L;
                    am.setRepeating(AlarmManager.RTC_WAKEUP,l, 3600L, sender);
                    //context.startService(intent_alarm);
    }
    }

Кажется, здесь я дал 3,6 секунды в качестве интервала.

Но служба не запущена, я проверил это вручную. Пожалуйста, скажите мне, что я делаю неправильно?


person Vignesh Bala    schedule 24.02.2014    source источник
comment
правильно ли вы объявили свой получатель в файле манифеста   -  person Nikunj Patel    schedule 24.02.2014
comment
да. Если я запускаю его с помощью startService, он работает нормально. Я хочу запускать службу каждые 10 секунд.   -  person Vignesh Bala    schedule 24.02.2014
comment
‹приемник android:name=com.example.broadcast_internetcheck.NetworkChangeReceiver android:label=NetworkChangeReceiver › ‹intent-filter› ‹action android:name=android.net.conn.CONNECTIVITY_CHANGE /› ‹action android:name=android.net.wifi .WIFI_STATE_CHANGED /› ‹/фильтр намерений› ‹/приемник›   -  person Vignesh Bala    schedule 24.02.2014
comment
Это очень быстро разряжает батарею устройства.   -  person Bex    schedule 24.02.2014
comment
@VigneshBala попробуйте код Грега и дайте мне знать, что не так   -  person Nikunj Patel    schedule 24.02.2014
comment
@NikPatel Класс широковещательного приемника отлично работает, когда я подключаюсь. Я проверил, работает ли служба, когда я просто запускаю ее без AlarmManager.   -  person Vignesh Bala    schedule 24.02.2014
comment
вы использовали PendingIntent.getBroadcast вместо PendingIntent.getService   -  person Nikunj Patel    schedule 24.02.2014
comment
@NikPatel Спасибо, чувак...   -  person Vignesh Bala    schedule 24.02.2014


Ответы (2)


Вам нужно сообщить диспетчеру тревог, чтобы он запустил вашу службу:

Intent intent_alarm = new Intent(context, MyService.class);
sender = PendingIntent.getService(context, 0, intent_alarm, 0);
person Greg Ennis    schedule 24.02.2014
comment
Нет, это случается со всеми нами. Если это решено, пожалуйста, отметьте как ответ, чтобы помочь другим. - person Greg Ennis; 24.02.2014
comment
@GregEnnis я использую getService, тогда он не запускает мою службу, но когда я использую getBroadcast, тогда она запускает службу - person nida; 22.01.2015

вы использовали PendingIntent.getBroadcast вместо PendingIntent.getService, поэтому используйте это ->

Intent intent_alarm = new Intent(context, MyService.class);
sender = PendingIntent.getService(context, 0, intent_alarm, 0);
person Nikunj Patel    schedule 24.02.2014