Если вы указали значения в намерении при запуске / привязке к услуге, вы можете получить доступ к данным из 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