Служба Android в библиотеке не обновляется при совместном использовании двумя приложениями - PullRequest
1 голос
/ 07 февраля 2012

У меня есть два отдельных приложения, которые используют общий фоновый сервис (который находится в общей библиотеке, в которую входят оба приложения) для сбора данных Bluetooth.Все отлично работает при первой установке приложений.

Проблема в том, что когда одно из приложений повторно развертывается после изменения общей службы, оно все еще использует ранее установленную службу.

Вот некоторая информация и пример, чтобы прояснить ситуацию: 2 приложения называются BioSound и BioZen.Каждая из них включает в себя общую библиотеку AndroidSpineServerLib, в состав которой входит общая библиотека AndroidBTService (которая содержит фоновый сервис)

Например, при первой установке AndroidBTService имеет номер версии, скажем, 1.0.Когда приложения развернуты, все в порядке, и BioZen, и BioSound используют сервис V1.0.

Затем я изменяю BioSound и AndroidBTService, увеличивая его версию до V1.1.Когда я разверну BioSound после этого, я ожидаю, что он будет использовать только что измененный сервис V1.1, но он продолжает использовать сервис V1.0.Единственный способ исправить это - удалить BioZen, а затем BioSound с правильным сервисом (мне даже не нужно переустанавливать BioSound).

Программно, когда я запускаю каждое приложение, которое привязывается к сервису, и когдакаждое приложение закрывается, я открепляю сервис.

Очевидно, что я что-то упускаю, но не могу понять это.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Я уверен, что это так, но у меня проблемы с деталями.

Вот существующий код:

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.
0 голосов
/ 07 февраля 2012

Ваша проблема может заключаться в том, что вы используете неявное намерение общаться с вашим сервисом, который не определяет приложение, а только действие. Это намерение (которое вы используете в обоих приложениях) в конечном итоге становится разрешенным для службы одного конкретного приложения. Вместо этого обязательно укажите явное намерение с конкретным компонентом или классом. Подробнее см. Документы о намерениях .

...