2014-07-15 35 views
0

documentaion在开发者论坛上,这是怎么了,我可以用AIDL绑定我的服务:绑定使用AIDL与绑定使用操作的服务?

/* Establish a couple connections with the service, binding by interface names.This allows other applications to be installed that replace the remote service by implementingthe same interface.*/ 

bindService(new Intent(IRemoteService.class.getName()),mConnection, Context.BIND_AUTO_CREATE); 

现在我有一个应用程序,它具有服务类和AIDL接口。

和我有过,我希望访问服务类应用A的,在使用应用程序A暴露纽约AIDL

所以我创建完全相同pacakge应用B的内部AIDLs方法和具有粘贴AIDLs应用B从应用程序A.

但是,当我尝试使用上面提到的文档的机制来绑定服务它告诉我:

无法启动服务意向{行动com.example.service.MyService } U = 0:未找到

在应用程序A服务

导出= “真”。

这种方法我在应用中添加一个意图过滤器,以我的服务,并试图指定明确的意图使用

intent.setClassName(String packageName, String className) 

而且现在它的工作现在insted的!

那么有什么我错过了,而提到原始文件?当接近将被使用?

+0

IRemoteService.class.getName()返回什么?你是如何在清单中定义你的服务的? – pskink

+1

请参阅我的问题开始时引用Android文档的链接。 http://developer.android.com/guide/components/aidl.html#Calling –

+0

你没有回答,你是如何在清单中声明你的服务的? – pskink

回答

0

在上面的评论中与pskink讨论后,我得到了这个问题的答案。这个问题在于我的新实现。

检查文档中以上示例中使用的Intent的构造函数。它告诉IRemoteService.class.getName()传入里面的Intent构造函数不过是一个'Action'。因此,如果我希望我的代码应该能够找到我希望绑定的服务,那么应该在我的服务的intent过滤器中提及由返回的字符串IRemoteService.class.getName()

两点这里主要考虑是:

  1. 这不会遵循的行为标准命名约定。

  2. 使用隐式意图启动服务使waring作为隐含的意图与startService是不安全的,因为明显的原因,如果多个服务使用相同的操作,那么这将是一个问题。