【问题标题】:Android service in library图书馆中的 Android 服务
【发布时间】:2011-03-22 16:01:42
【问题描述】:

我创建了一个库,其中包含我希望能够绑定到多个 apk 的服务。

这是在我的库清单中

<service class=".service.MyService" android:permission="com.wissen.permission.MY_SERVICE_PERMISSION">
<intent-filter>
<action android:value="com.wissen.testApp.service.MY_SERVICE" />
</intent-filter>
</service>

这是在我的 apk 清单中

<uses-permission android:name="com.wissen.permission.MY_SERVICE_PERMISSION"></uses-permission>

我当然将 lib 添加到 apk 中。我继续找不到服务(警告)。我做错了什么。

我是这样绑定的

bindService(new Intent("com.wissen.testApp.service.MY_SERVICE"), conn, Context.BIND_AUTO_CREATE);

解决方案:
我为这些创建了aidl,现在它工作正常。

【问题讨论】:

  • 我为这些创建了aidl,现在它工作正常。

标签: android service


【解决方案1】:

服务需要在您的应用程序的清单中指定,而不是库。

【讨论】:

  • 这应该可以正常工作。我认为最终在库中定义的&lt;service&gt; 元素等将自动包含在宿主项目中,但我认为还没有。只需从库的清单中复制 &lt;service&gt; 元素并将其放入主机应用程序中。
  • 我添加了它,但问题是我必须在两个 apk(清单)中定义,然后当我将它绑定到一个并尝试将它绑定到另一个时,它会创建一个新实例,它不使用服务的相同实例或看起来像它。我在创建中放了一个日志,它调用了它两次,我也尝试调用我在绑定对象中的一个集合,它不反映是否从第二个 apk 调用 get,所以它必须创建两个实例。
  • 没有比要求开发者在他们的应用清单中添加服务更优雅的解决方案吗?
  • 清单合并现在会将库项目中声明的服务放入应用程序的清单文件中。
【解决方案2】:

您的服务必须是远程服务。您应该创建一个 *.aidl(您的服务的接口)并在它自己的进程中启动它。 你可以在这里阅读:Android Interface Definition Language (AIDL)

【讨论】:

  • 不,它不需要是从 Android 库项目中使用的远程服务。仅当服务位于完全独立的应用程序中时才需要这样做。
  • @CommonsWare 在库中声明服务的另一种方法是什么?
  • @Bryan:我不明白你的问题,抱歉。你可能想问一个新的 Stack Overflow 问题,在那里你可以更详细地解释你的担忧。
【解决方案3】:

我为这些创建了aidl,现在它工作正常。

【讨论】:

  • 你是在写博客还是分享你的代码..我遇到了类似 stub.interface not found 之类的错误...
猜你喜欢
  • 1970-01-01
  • 2019-10-31
  • 2018-11-24
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多