Сервис и Деятельность - PullRequest
       11

Сервис и Деятельность

0 голосов
/ 20 июля 2011

У меня есть сервис GPS.java и сообщение message.java, которое связано с упомянутым сервисом (GPS.java). Я связал их, используя связующее и сервисное соединение. Я хочу, чтобы значения моего класса активности были отправлены с использованием putExtra (Sring, value). Как бы я получил их в моем сервисе?

1 Ответ

0 голосов
/ 20 июля 2011

Если вы указали значения в намерении при запуске / привязке к услуге, вы можете получить доступ к данным из Intent.getExtras

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

Вот пример:

В службе:

private final ExampleBinder binder = new ExampleBinder();

private class ExampleBinder extends Binder {
    public void setExtras(Bundle b) {
        // Set extras and process them
    }

    public ExampleService getService() {
        return ExampleService.this;
    }

    public void registerClient(ClientInterface client) {
        synchronized(clients) {
            clients.add(client);
        }
    }

    public void unregisterClient(ClientInterface client) {
        synchronized(clients) {
            clients.remove(client);
        }
    }
};

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

private final HashSet<ClientInterface> clients = new HashSet<ClientInterface>();

public static interface ClientInterface {
    int value1();
    String value2();
}

В клиенте:

public class ExampleActivity extends Activity implements ExampleService.ClientInterface {
    private final ServiceConnection connection = new ServiceConnection() {
        public void onServiceDisconnected(ComponentName name) {
            // Handle unexpected disconnects (crashes)
        }

        public void onServiceConnected(ComponentName name, IBinder service) {
            ExampleService.ExampleBinder binder = (ExampleService.ExampleBinder) service;
            binder.registerClient(ExampleActivity.this);
        }
    };

public void onResume() {
    bindService(new Intent(this, ExampleService.class), connection, Context.BIND_AUTO_CREATE);
}

public void onPause() {
    unbindService(connection);
}

public int value1() {
    return 4711;
}

public String value2() {
    return "foobar";
}

Я могу добавить, что все это при условии, что вы не используете AIDL, если вы очень похожи, просто добавьте дополнительный метод в объявлении интерфейса..

Вы должны прочитать больше о связанных службах здесь: http://developer.android.com/guide/topics/fundamentals/bound-services.html или посмотреть пример: http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

В SDK также есть пример, который называется LocationService.java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...