我有一个服务GPS.java和一个活动message.java,它绑定到上面提到的服务(GPS.java)。我使用绑定和服务连接限制它们。我想要使用putExtra(Sring,value)发送的活动类的值。我将如何在我的服务中收到它们?
答案 0 :(得分:0)
如果您在启动/绑定到服务时提供了意图中的值,则可以访问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
的示例