1

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 つの数値の合計が表示されます。

どんな助けでも大歓迎です。

4

1 に答える 1

1

何日も試してみた結果、プロジェクトの名前はsmall-caseにする必要があります。それはEclipseの癖ですか、それともAndroidの癖ですか? 知らない。しかし、それは機能します。

于 2013-09-12T10:11:51.920 に答える