2011-10-24 8 views
13

バックグラウンドサービスの使用に問題があります。
私は2つのアクティビティからサービスを利用しています。onServiceConnected()が呼び出されていない

最初の活動はbindService(intent, mConnection, Context.BIND_AUTO_CREATE);

これは完璧に動作し、私はonServiceConnected()Messageを送信することができて、それにstartService(intent)Serviceとバインドを開始します。私は私が押したときにサービスを使用する必要がありますButtonを持っている第二の活動で

第二の活動は再び今ここbindService(intent, mConnection, Context.BIND_AUTO_CREATE);

は私の問題で使用して、(それはすでに始まっていますので)Serviceに結合しますそれ。
しかし、このアクティビティではonServiceConnected()は呼び出されないので、Messengerを作成してMessageをサーバーに送信するバインダーを取得できません。

onServiceConnected()が正確に呼び出されたとき、またはそれが何かを待っているときは誰でも知っていますか?
この問題を解決するために、

編集:bindServiceはfalseを返します。いくつかのより多くの研究の後、事前

+0

'bindService'は、最初のバインディングの後に' onRebind'を呼び出す場合は 'false'を返します。 – farukdgn

答えて

24

おかげで、私はこれは、Androidの既知の問題です発見しました。

私が話していた2番目の活動は、TabActivityのコンテンツとして使用される活動でした。

この問題を解決する方法は...

<service 
      android:name=".MyAccessibilityService" 
      android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" > 
      <intent-filter> 
       <action android:name="android.accessibilityservice.AccessibilityService" /> 
      </intent-filter> 

</service> 

MyAccessibilityServiceサービス名の代わりに、getApplicationContext().bindService(...)

+2

こんにちは、私は同じ問題があります。あなたはもう少し解決策を説明できますか?可能であれば、ここで自分のコードを見て、何を変えなければならないか教えてください。どうもありがとうございます。このエラーは私を一日のうちに狂ってしまう。 私のコード:http://ideone.com/cV5BJa –

+0

getApplicationContext()を使用する必要がある理由を私に説明できますか?bindService not bindService? bindServiceは私の1つのアクティビティで動作しますが、別のアクティビティ(getApplicationContext()。bindServiceが動作します)では動作しません。それは非常に奇妙です。 – Thinsky

+0

ありがとうございました!これはまさに私が直面していたものであり、アクティビティのコンテキストではなくアプリケーションのコンテキストを使用するのが大変です。それは私の問題を解決しました!ありがとう!! – Sjd

8

がマニフェストにバインドを追加使用して、活動状況に、アプリケーションのコンテキストにbindService(...)を呼び出すことでした。

16

あなたが追加する必要がありますAndroidのマニフェストファイルの

<service android:name="package.path.to.your.service.class" android:enabled="true"></service>

+2

私のために、それは必要ありません。クラス –

+1

非常に非常にですマニフェストpackage.path.to.your.service.class –

1

これは私のため

代わりの

public IBinder onBind(Intent intent) { 
    return null; 
} 

を働いたものです私はそれがちょうど今私に起こった

public IBinder onBind(Intent intent) { 
    return mMessenger.getBinder(); 
} 
+0

でパッケージ+名前を追加する特定の実装を必要としない場合は、新しいバインダーでも動作します – DrinkBird

5

を使用しました。
バインドクラスをインスタンス化してからonbindを返すことを忘れないでください。 愚かな間違いですが、それが起こります。うまくいけば、これは将来誰かを助けるでしょう。

private YourBinder thisBinder; 

oncreate 
{ 
thisBinder = new YourBinder(); <--dont forget this. 
} 


public class YourBinder extends Binder 
{ 

} 

public IBinder onBind(Intent intent) 
{ 
return thisBinder; 
} 
0

私はxmarianであり、同じ問題がありましたが、後で私はそのサービスに適切な名前を与えていないことがわかりました。したがって、サービス名にはname属性を指定する必要があります。私はxmarianコンパイラがAndroid XMLでそのエントリを作るのと同じことをしていると思います。

関連する問題