3

AIDLファイルを使用して、あるアプリケーションAから別のアプリケーションBにデータを送信したい。私のアプリAは以下のようなものです、

public class LibValue  {       
    public static native int intFromJNI(int n);   
    static {
        System.loadLibrary("hello");
        System.out.println("LibValue : Loading library");
    }

JNIファイルから上記のクラスに値を取得しています。AIDLサービスを使用して別のアプリBを送信するための上記のクラスのデータは次のとおりです。

IEventService.aidl

interface IEventService {

   int intFromJNI(in int n);
}

このために私はIEventImpl.javaクラスを書きました

 public class IEventImpl extends IEventService.Stub{

        int result;

        @Override
        public int intFromJNI(int n) throws RemoteException {
            // TODO Auto-generated method stub

            System.out.println("IEventImpl"+LibValue.intFromJNI(n));
            return LibValue.intFromJNI(n);
        }
}

上記のクラスにアクセスするには、以下のようなサービスクラスを作成します

パブリッククラスEventServiceはServiceを拡張します{

public IEventImpl iservice;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub

    Log.i("EventService", "indside onBind");
    return this.iservice;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();

    this.iservice = new IEventImpl();

    Log.i("EventService", "indside OncREATE");
}

@Override
public boolean onUnbind(Intent intent) {
    // TODO Auto-generated method stub
    return super.onUnbind(intent);
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub

    this.iservice = null;
    super.onDestroy();
}

上記のクラスはすべてサーバー側です。以下のクラスは、データにアクセスするためのClient(app)クラスです。

public class EventClient extends Activity implements OnClickListener, ServiceConnection{    

    public IEventService myService;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_client); 

        button = (Button)findViewById(R.id.button1);
        this.button.setOnClickListener(this);

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        if (!super.bindService(new Intent(IEventService.class.getName()),
                this, BIND_AUTO_CREATE)) {
            Log.w("EventClient", "Failed to bind to service");
            System.out.println("inside on resume");
        }
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        super.unbindService(this);
    }


    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        // TODO Auto-generated method stub


        this.myService = IEventService.Stub.asInterface(service);
        Log.i("EventClient", "ServiceConnected");




    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        // TODO Auto-generated method stub

        Log.d("EventClient", "onServiceDisconnected()'ed to " + name);
        // our IFibonacciService service is no longer connected
        this.myService = null;

    }

サービスクラスのデータにアクセスしようとしていますが、方法がわかりません。サービスからクライアントアプリケーションにデータにアクセスする方法を誰かに教えてもらえますか?

ありがとう

4

0 に答える 0