4

バインドされたアクティビティとサービスを取得しました。

onServiceConnectedがServiceConnectionで呼び出されると、次のことを行います。

mInterfaceObject = IInterface1.Stub.asInterface(arg1);

mInterfaceObject.register(mController);

mControllerは次のとおりです。

private final IInterface2.Stub mController = new IInterface2.Stub() {

IInterface1とIInterface2はどちらもAIDLファイルです。

今問題。サービスでのレジスタの実装。パラメータはnullになります。

私は何が間違っているのですか?

4

3 に答える 3

10

Eclipseは自動的に次のメソッドを追加しました

    @Override
    public IBinder asBinder() {
        return null;
    };

これはコミュニケーション全体を台無しにしました。このメソッドはオーバーライドしないでください。

于 2012-03-23T10:55:58.687 に答える
3

これが私のサービスの実装です。IServiceとIDataServiceCallbackの2つのaidlファイルがあります。

private ServiceConnection mConnection = new ServiceConnection()
{
    public void onServiceConnected(ComponentName className, IBinder service) 
    {
        serv = iService.Stub.asInterface((IBinder)service);

        try 
         {
               serv.registerCallback(mCallback); 
         } 
         catch (RemoteException e)
         {
             e.printStackTrace();
         }

    }

    public void onServiceDisconnected(ComponentName className) 
    {
        try 
        {
             serv.unregisterCallback(mCallback);
        } 
        catch(RemoteException e) 
        {
            e.printStackTrace();
        }
        serv = null;
    }
};

これが私のmCallbackの部分です。

private iDataServiceCallback mCallback = new iDataServiceCallback.Stub() 
{

    @Override
    public void updateResponse(String text) throws RemoteException 
    {
        // TODO Auto-generated method stub

        }

    @Override
    public void loginResponse(String text) throws RemoteException {
        // TODO Auto-generated method stub
        Message msg = Message.obtain();

        msg.obj = text;

        handler.sendMessage(msg);
    }


};

サービス側では、これを実装しました。

@Override
public IBinder onBind(Intent arg) {
    // TODO Auto-generated method stub
    return mBinder;
}



private final iService.Stub mBinder = new iService.Stub()
{

    @Override
    public void registerCallback(iDataServiceCallback cb) throws RemoteException {
        // TODO Auto-generated method stub
        if (cb != null)
        {
            mCallbacks.register(cb);        
        }
    }

    @Override
    public void unregisterCallback(iDataServiceCallback cb) throws RemoteException {
        // TODO Auto-generated method stub

        if (cb != null) mCallbacks.unregister(cb);  

    }

これがIService.aidlです

package com.nishant.phototest;

import com.nishant.phototest.iDataServiceCallback;

interface iService
{
    void doLogin(String ip,String port);

    void updatePhoto(in byte[] data);

    void registerCallback(iDataServiceCallback cb); 

    void unregisterCallback(iDataServiceCallback cb);
}

これがIDataServiceCallBack.aidlです

package com.nishant.phototest;

oneway interface iDataServiceCallback
{
    void loginResponse(String text);

    void updateResponse(String text);
}

これがお役に立てば幸いです。

于 2012-03-21T09:27:46.823 に答える