Eclipse の同じワークスペース内に2 つの* 異なるプロジェクト*があります (ほとんどの AIDL の例は、同じプロジェクト内の異なるプロセスを処理します)。プロジェクト A は単なる HelloWorld であり、2 つの数値の合計を表示するだけです。これを MyFirstApp というクライアントからリモートで呼び出して表示しています。
問題: onServiceConnected() メソッドが呼び出されません。
私がこれまでに試したこと:
1)マニフェスト ファイルに android:process=":remote"> タグが含まれている。インテント フィルタが存在します。はい、すべてが application タグ内にあります。ここにあります:
<service android:name=".ArithmeticService"
android:process=":remote">
<intent-filter >
<action android:name="com.example.helloworld.ArithmeticService"/>
</intent-filter>
</service>
</application>
2)私の ArithmeticService では、関数 onBind() は単に Null を返すのではなく、mBinder を返します。ここにあります:
@Override
public IBinder onBind(Intent intent) {
// Return the interface
Log.d(getClass().getSimpleName(),"IBinder");
return mBinder;
}
3)クライアント側では、インターフェイスの実装はサーバー側の同じパッケージにあります。
4)クライアントの MainActivity の onCreate() 関数で、関数 initConnection() を呼び出しています。これは次のとおりです。
void initConnection(){
mServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mService = null;
Toast.makeText(getApplicationContext(), "no", Toast.LENGTH_SHORT).show();
Log.d("IRemote", "Binding - Service disconnected");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
// TODO Auto-generated method stub
mService = IRemote.Stub.asInterface((IBinder) service);
Toast.makeText(getApplicationContext(), "yes", Toast.LENGTH_SHORT).show();
Log.d("IRemote", "Binding is done - Service connected");
}
};
if(mService == null)
{
Intent it = new Intent();
it.setAction("com.example.helloworld.ArithmeticService");
//binding to remote service
bindService(it, mServiceConnection, Service.BIND_AUTO_CREATE);
}
}
コードの残りの部分は非常に単純です。ボタンをクリックすると、リモート サーバーが呼び出され、2 つの数値の合計が表示されます。
どんな助けでも大歓迎です。