2012-09-28 2 views
0

Я создаю приложение, которое в настоящее время выполняется как автономное приложение, которое опросает службу с помощью AsyncTask. Я хотел бы переместить опрос в службу Android, которая запускается при запуске и может уведомить пользователя об изменениях. Кривым шаром является необходимость делиться этими данными между действиями (и скоро будущей службой), поэтому я не потребляю батарею со всех сторон назад и вперед между хранилищем и хранилищем в памяти.Фоновый опрос Android и пользовательский интерфейс

Есть ли способ создать службу, которая работает в фоновом режиме, опрос каждые полчаса с помощью AlarmManager, который делится (через константы) данными с Пользовательским интерфейсом, который можно запустить, нажав на уведомление, которое служба создает или через сама пусковая установка?

Сейчас это, как далеко я получил:

Вот служба:

public class PollService extends Service { 
    private final IBinder binder = new PollBinder(); 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     SharedData.update(); 

     return Service.START_NOT_STICKY; 
    } 

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

    public class PollBinder extends Binder { 
     PollService getService() { 
      return PollService.this; 
     } 
    } 
} 

Это запустит сервис ...

public class PollScheduleReceiver extends RoboBroadcastReceiver { 
    private static final int POLL_FREQ_SEC = 30; 
    @Override 
    protected void handleReceive(Context context, Intent intent) { 
     Intent schedulerIntent = new Intent(context, PollStartReceiver.class); 
     PendingIntent pendingSchedulerIntent = PendingIntent.getBroadcast(context, 0, schedulerIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
     calendar.add(Calendar.SECOND, POLL_FREQ_SEC); 
     alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), POLL_FREQ_SEC * 1000, pendingSchedulerIntent); 
    } 
} 

Это вызовет триггер при загрузке:

public class PollStartReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent pollService = new Intent(context, PollService.class); 
     context.startService(pollService); 
    } 
} 

ответ

0

я не знаю, если я получил ваш вопрос, но, насколько я это может быть сделано в нескольких шагах ..

1) Запустить службу, так что будет работать в фоновом режиме

2) Опрос может быть сделан в этой службе с помощью AsyncTask или Handler каждые 30 секунд, как и пожелание

3) И когда условие удовлетворяет, запустите желаемую активность из этой службы.