由两个应用程序共享时,库中的 Android 服务未更新
Posted
技术标签:
【中文标题】由两个应用程序共享时,库中的 Android 服务未更新【英文标题】:Android Service in a library not being updated when shared by two applications 【发布时间】:2012-02-07 16:36:20 【问题描述】:我有两个独立的应用程序,它们使用一个公共后台服务(位于两个应用程序都包含的公共库中)来收集蓝牙数据。首次安装应用程序时一切正常。
问题是当公共服务更改后重新部署其中一个应用程序时,它仍然使用之前安装的服务。
这里有一些信息和一个例子来澄清事情: 这两个应用程序被命名为 Biosound 和 BioZen。它们每个都包含一个名为androidSpineServerLib的公共库,其中包括公共库AndroidBTService(包含后台服务)
例如,在第一次安装时,AndroidBTService 的版本号为 1.0。部署应用程序后一切正常,BioZen 和 BioSound 都使用 V1.0 服务。
然后我对 BioSound 和 AndroidBTService 进行了更改,将其版本增加到 V1.1。当我在此之后部署 BioSound 时,我希望它使用新更改的服务 V1.1,但它继续使用 V1.0 服务。解决此问题的唯一方法是删除 BioZen ,然后删除 BioSound 正确的服务(我什至不必重新安装 BioSound)。
以编程方式,当我启动每个应用程序时,我绑定到服务,当每个应用程序退出时,我取消绑定服务。
显然我错过了一些东西,但无法弄清楚。有什么想法吗?
【问题讨论】:
【参考方案1】:您的问题可能是您正在使用隐式意图与您的服务进行通信,该意图不特定于应用程序,而只是一个操作。该意图(您在两个应用程序中都使用)最终被解析为一个特定应用程序的服务。相反,请确保使用特定组件或类指定显式意图。详情请见Intent docs。
【讨论】:
【参考方案2】:我确定就是这样,但我对细节有困难。
这是现有的代码:
Mainfest for the main Application:
<application android:icon="@drawable/biosound_icon" android:label="@string/app_name" android:debuggable="true">
<service
android:name="com.t2.biofeedback.BioFeedbackService">
<intent-filter>
<action android:name="com.t2.biofeedback.IBioFeedbackService"/>
</intent-filter>
</service>
</application>
绑定服务的调用在库 AndroidSpineServerLib 中
Intent intent2 = new Intent("com.t2.biofeedback.IBioFeedbackService");
bindService(intent2, mConnection, Context.BIND_AUTO_CREATE);
所以我可以看到服务是如何绑定到特定应用程序的
为了解决这个问题,我尝试了:
Intent intent2 = new Intent(this, BioFeedbackService.class);
bindService(intent2, mConnection, Context.BIND_AUTO_CREATE);
问题是服务没有创建。
我也尝试了以下
In the manifest of the service:
<service
android:class=".service.BioFeedbackService">
<intent-filter>
<action android:name="com.t2.biofeedback.IBioFeedbackService"/>
</intent-filter>
</service>
And in the library where I bind the service:
Intent intent2 = new Intent();
intent2.setAction("com.t2.biofeedback.IBioFeedbackService");
bindService(intent2, mConnection, Context.BIND_AUTO_CREATE);
还是没有运气。
也许我将服务定义放在了错误的清单中。 请记住,我有以下层次结构
Main Application references:
AndroidBTService (Library), which references
AndroidSpineServerLib (Library)
So I have 3 manifests and not sure which to update.
【讨论】:
以上是关于由两个应用程序共享时,库中的 Android 服务未更新的主要内容,如果未能解决你的问题,请参考以下文章