服务和活动

时间:2011-07-20 04:07:56

标签: android service binding android-activity

我有一个服务GPS.java和一个活动message.java,它绑定到上面提到的服务(GPS.java)。我使用绑定和服务连接限制它们。我想要使​​用putExtra(Sring,value)发送的活动类的值。我将如何在我的服务中收到它们?

1 个答案:

答案 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

的示例