2010-12-05 2 views
1

Android 2.2.1で基本的なAIDLサービスを開発しようとしています。すべてがビルドしてokをインストールするようですが、bindService()はそうではありません。私のServiceConnectionクラスは呼び出されません。私は本当に理由が分からないので、どんな助けもありがたいです。Android:bindServiceはリモート(AIDL)サービスに接続しません。理由はわかりません

public class go extends Activity { 
    protected static final String TAG = "HOSPlayerClient"; 
    private IHOSPlayerService hosPlayerService = null; 

    private ServiceConnection serviceConnection = new ServiceConnection() { 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      Log.v(TAG, "onServiceConnection"); 
      hosPlayerService = IHOSPlayerService.Stub.asInterface(service); 
      callService(); 
     } 

     public void onServiceDisconnected(ComponentName name) { 
      Log.v(TAG, "onServiceDisconnected"); 
     } 
    }; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Log.v(TAG, IHOSPlayerService.class.getName()); 
     boolean bound = bindService(
       new Intent(IHOSPlayerService.class.getName()), 
       serviceConnection, Context.BIND_AUTO_CREATE); 

     Log.v(TAG, bound ? "service bound" : "service bind failed"); 
    } 

    private void callService() { 
     try { 
      hosPlayerService.go(); 
     } catch (RemoteException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

...と、ここでは、私は私のAIDLサービスの関連する部分であると信じるものです::ここに私のクライアントアクティビティがある

public class HOSPlayerService extends Service 
{ 
private static final String TAG = "HOSPlayerService"; 

public class HOSPlayerServiceImpl extends IHOSPlayerService.Stub 
{ 
    public void go() throws RemoteException 
    { 
    Log.v(TAG, "go called"); 
    } 
} 

@Override 
public IBinder onBind(Intent intent) 
{ 
    // TODO Auto-generated method stub 
    return new HOSPlayerServiceImpl(); 
} 
} 

...とAIDLファイル:

package com.HOS.ahos.HOSPlayerService; 

interface IHOSPlayerService 
{ 
void go(); 
} 
+1

'adb logcat'、DDMS、またはDDMSパースペクティブをEclipseで使用してLogCatを調べ、' bindService() '呼び出しの前後に警告があるかどうかを確認します。最も可能性の高い警告、IMHOは、Androidがサービスを見つけることができないということです。あなたのマニフェストにそれがないか、 ''が 'bindService()'に渡された 'Intent 'と一致しないかもしれません。 – CommonsWare

+0

パッケージ名とファイル名は2つのアプリケーションで同じですか? – johann

答えて

2

は、サービスファイルに次のコードを配置しようとすると -

@Override 
public IBinder onBind(Intent arg0) { 
    //arg0.getExtras(); 
    return binder; 
} 

サービスがバインダーを返す必要がある場合、MyServiceConnectionクラスだけが呼び出されます。