2012-02-07 6 views
1

私は、両方のアプリケーションに共通のバックグラウンドサービスを使用してBluetoothデータを収集する2つのアプリケーションを用意しています。アプリケーションの最初のインストール時にすべてうまく動作します。2つのアプリケーションで共有するとライブラリ内のAndroidサービスが更新されない

共通のサービスを変更した後にアプリケーションの1つを再デプロイすると、以前にインストールされたサービスが引き続き使用されるという問題があります。

ここにいくつかの情報と例を明確にする: 2つのアプリケーションの名前はBioSoundとBioZenです。それぞれには、AndroidSpineServerLibという共通ライブラリが含まれています。これらのライブラリには、共通ライブラリAndroidBTService(バックグラウンドサービスを含む)が含まれています。

たとえば、最初のインストールでは、AndroidBTServiceのバージョン番号は1.0です。アプリケーションがすべて展開されている場合は、BioZenとBioSoundの両方でV1.0サービスが使用されます。

次に、私はBioSoundとAndroidBTServiceに変更を加え、バージョンをV1.1に増やします。この後にBioSoundを導入すると、新しく変更されたサービスV1.1を使用することが期待されますが、V1.0サービスは引き続き使用されます。この問題を解決する唯一の方法は、BioZenを削除し、次にBioSoundに正しいサービスを提供することです(BioSoundを再インストールする必要はありません)。

各アプリケーションを起動すると、サービスにバインドされ、各アプリケーションが終了するとサービスがバインド解除されます。

明らかに私は何かが不足していますが、それを理解できません。何か案は?

答えて

0

あなたの問題は、アプリケーションに特化していないサービスと通信する暗黙的な意図を使用している可能性があります。その意図(両方のアプリケーションで使用している)は、特定のアプリケーションのサービスに解決されてしまいます。代わりに、明示的なインテントを特定のコンポーネントまたはクラスで指定するようにしてください。詳細は、Intent docsを参照してください。

0

私はこれがそれだと確信していますが、詳細については問題があります。

ここでは、既存のコードです:

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> 

サービスをバインドするための呼び出しは、だから私はサービスが特定のアプリケーション

に結合させたかを確認することができ、ライブラリに
Intent intent2 = new Intent("com.t2.biofeedback.IBioFeedbackService"); 
bindService(intent2, mConnection, Context.BIND_AUTO_CREATE); 

AndroidSpineServerLib

だったが、

これを修正するには、私は試しました:

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. 
関連する問題