使用intent过滤器进行服务绑定

时间:2012-10-10 20:36:59

标签: android service android-intent

我无法使用意图过滤器将我的活动绑定到我的服务应用程序。

以下是我必须连接到服务应用程序的代码段:

// The connection to the service.
private ServiceConnection connection = new ServiceConnection()
{
    // When the messenger gets bound to the service.
    public void onServiceConnected(ComponentName className, IBinder binder)
    {
        Log.e(TAG, "Attached");
        messenger = new Messenger(binder);
    }

    // When the messenger gets unbound from the service.
    public void onServiceDisconnected(ComponentName className)
    {
        messenger = null;
    }
};

// Bind the service connection with the service application.
private void createServiceBinding()
{
    Log.e(TAG, "binding service.");
    activity.bindService(new Intent(this.activity, TestService.class), this.connection, Context.BIND_AUTO_CREATE);
    this.isBound = true;
}

这可以找到。我可以使用Messenger发送和接收消息。但是,我需要能够使用我的服务应用程序的intent过滤器而不是TestService.class来调用activity.bindService。

如何使用intent过滤器将活动绑定到服务应用程序(例如com.example.testapplication.TestService而不是TestService.class)?

提前致谢!

1 个答案:

答案 0 :(得分:2)

  

但是,我需要能够使用我的服务应用程序的intent过滤器而不是TestService.class来调用activity.bindService。

更准确地说,您希望能够使用与您服务的bindService()匹配的Intent来呼叫<intent-filter>

除非您计划绑定到服务的第三方应用,否则请坚持使用现有方法并从服务中删除<intent-filter>。没有必要(如您所见)并默认导出您的服务。

  

如何使用intent过滤器将活动绑定到服务应用程序(例如com.example.testapplication.TestService而不是TestService.class)?

使用其他Intent构造函数,以及Intent对象上的其他设置器,将其配置为与<intent-filter>匹配。由于您决定不提供<intent-filter>,我们无法向您提供具体说明。

例如,如果您的<intent-filter>看起来像:

        <intent-filter>
            <action android:name="com.troje.this.is.probably.a.bad.IDEA"/>
        </intent-filter>

然后您的Intent将通过new Intent("com.troje.this.is.probably.a.bad.IDEA")创建,以用于绑定到服务。