由两个应用程序共享时,库中的 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 服务未更新的主要内容,如果未能解决你的问题,请参考以下文章

无法解析 android 库中的符号“日志”

无法从 main.cpp 中的共享库中捕获异常

C++ 静态库中的共享全局变量:Linux

共享库中的 QQuickWindow 在 QApplication 中显示时自动关闭

使用本机库中的功能的 Xamarin 表单应用程序

Android,http:如何将文件上传到由共享服务器托管的站点?