【问题标题】:Android - Bind to a service from an other appAndroid - 绑定到来自其他应用的服务
【发布时间】:2012-04-03 06:46:12
【问题描述】:

我已经编写了 2 个应用程序。 MyServiceApplicationMyActivityApplication。 在启动时,我启动MyService,它作为远程服务运行。我希望MyActivityApplication 与它通信,但是MyActivityApplication 无权访问MyServiceApplication 类。我在网上看到的所有示例都通过以下方式将活动绑定到服务:

bindService(new Intent(Binding.this, MyService.class), mConnection, Context.BIND_AUTO_CREATE);

我的应用程序需要与MyService 通信。该代码基于 Google 的 MessengerService 示例。

我之前提到的问题是我尝试绑定的服务是由另一个应用程序启动的,该应用程序的唯一目的是启动该服务。

有没有办法让两个应用程序保持独立?我的想法是我将拥有第二个、第三个和第四个应用程序,所有这些应用程序都可以与同一个服务进行通信。

【问题讨论】:

    标签: java android android-service


    【解决方案1】:

    您的服务和应用程序之间应该有一个共享库,用于定义您用来与绑定服务通信的接口。

    【讨论】:

    • 那么您实际上是在说我的应用程序应该包含一个包含服务类的 jar?或者即使我创建了 2 个单独的应用程序,它们也应该具有相同的代码库?
    • 您应该有一个库项目developer.android.com/guide/developing/projects/… 供两个应用程序使用。该库应包含绑定服务的活页夹,以便活页夹可用于 1) 从服务应用程序提供活页夹接口。 2) 用于将第二个应用绑定到服务。
    • 另一种方法是使用 AIDL:developer.android.com/guide/developing/tools/aidl.html。 “共享”库可以简化为整个aidl 文件。
    • 谢谢,我不知道有图书馆项目这样的东西。这似乎是一种更易于管理的方法,但我会同时阅读并弄清楚。谢谢。
    【解决方案2】:

    更新:
    此解决方案和代码示例在编写时有效:2015
    请寻找与这一天相关的其他解决方案。

    原始答案:
    您可以使用特定操作为您的服务定义一个意图文件管理器,并使用分配给该操作的意图绑定到该服务。

    我的服务应用程序:

    <service android:name=".MyService">
          <intent-filter>
            <action android:name="com.some.action.NAME" />
          </intent-filter>
    </service>
    

    我的活动应用程序:

    bindService(new Intent("com.some.action.NAME"), serviceConnection, Context.BIND_AUTO_CREATE);
    

    【讨论】:

    • 这可能以前有效,但现在服务意图必须明确。
    • @JkJensen ,你是对的,因为答案是在 2015 年写的。不过我认为这样的答案不应该被否决(不仅仅是因为这是我的答案)。 Stackoverflow 是答案(包括历史答案)的首选位置,更好的方法是编辑答案并指出答案的相关时间。
    猜你喜欢
    • 2016-03-27
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多