Связь с Android Сервисом - PullRequest
       3

Связь с Android Сервисом

1 голос
/ 19 октября 2011

Я разрабатываю приложение для Android, которое создает службу Android, которая обновляет местоположение мобильного устройства с помощью GPS. Он работает с таймером, который за время 'x' обновляет позицию.

Проблема в том, что я хотел бы подключиться к этой локальной службе Android из одного действия приложения, потому что я хотел бы изменить время обновления ('x'), когда захочу. Итак, как мне это сделать?

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

Любое предложение, помощь, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Если вы находитесь в одном и том же Process-Space (то же приложение / .apk), вы можете просто установить простое подключение к услуге В свою деятельность включите что-то вроде следующего:

private ServiceConnection _svcConnection = new ServiceConnection() {
    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        _myService = null;
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        _myService = ((MyService.LocalBinder) service).getService();
        if(!_myService.IsRunning())
            _myService.Start();
    }
};

    @Override
protected void onResume() {
    bindService(new Intent(Main.this, MyService.class), _svcConnection 
            BIND_AUTO_CREATE);
    startService(new Intent(Main.this, MyService.class));
    super.onResume();
}

    @Override
protected void onPause() {
    unbindService(_svcConnection);
    super.onPause();
}

Ваша служба нуждается в связующем:

    private final IBinder _Binder = new LocalBinder();

@Override
public IBinder onBind(Intent arg0) {
    return _Binder;
}

/**
 * Class for clients to access. Because we know this service always runs in
 * the same process as its clients, we don't need to deal with IPC.
 */
public class LocalBinder extends Binder {
    public MyService getService() {
        return MyService.this;
    }
}

Затем вы можете работать с объектом _MyService и вызывать любой метод для него. (Например, регистрация обратного вызова или запрос на обновление местоположения), но имейте в виду, что в случае сбоя подключения службы переменная _MyService будет иметь значение null!

_MyService.SetInterval(4);

Если вам нужен доступ к этой услуге из другого Приложения (Другой Процесс), вам придется иметь дело с IPC.

0 голосов
/ 19 октября 2011

Это вам поможет, вы делаете это в сервисе, обновите ваше местоположение этим методом

Timer timer = new Timer("Refresh Time");
      timer.schedule(RefreshTask, 1000L, 60 * 1000L);
private TimerTask refreshTask = new TimerTask() {
    @Override
        public void run() { 
                 Log.i(TAG, "Update time here");
                            }
 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...