곰돌푸우❤️

목차

    [서버 측]

     

    1. aidl 파일을 추가해준다.

     

     

     

    2. 빌드를 하면 app>build>intermediates>classes>aidl이 위치한 폴더에 .class 파일이 자동 생성된다.

     

     

     

    3. AndroidManifest에 action을 포함한 intent-filter와 함께 Service를 등록해준다.

     

     

     

     

    4. Service의 onBind에서 aidl 인터페이스를 구현한 객체를 리턴해준다.

     

     

     

     

     

      

    [클라이언트 측]

     

    1. 서버측 aidl파일이 위치한 패키지 경로랑 동일한 패키지 경로를 만들고 aidl파일을 프로젝트에 복사해준다.

     

     

    2. 빌드를 하면 app>build>intermediates>classes>aidl이 위치한 폴더에 .class 파일이 자동 생성된다.

     

     

    3. bindService로 서버측 Service에 바인드한다.

     

    Intent serviceIntent = new Intent(SERVER_ACTION);
    serviceIntent.setPackage(SERVER_PACKAGE);
    bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);

     

    4. bindService의 두번째 파라미터로 넘겨준 ServiceConnection 구현체의 onServiceConnected 콜백함수의 파라미터로 넘어온 IBinder로 aidl 인터페이스 구현체를 얻어낸다.

     

    private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mRemoteService = IRemoteService.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { mRemoteService = null; } };

     

    5. aidl 구현체 참조를 가지고 서버측에 구현 된 원격 메소드를 호출(RPC)한다.

     

    try {
        int sum = mRemoteService.sum(2, 5);
        Toast.makeText(getApplicationContext(), String.valueOf(sum), Toast.LENGTH_SHORT).show();
    } catch (RemoteException e) {
        e.printStackTrace();
    }

     

     

    * 클라이언트 측 완성 코드

     

     

     

     

     

    *소스는 아래 Github에서 볼 수 있습니다.

    https://github.com/simsi6/AidlExample

    facebook twitter googleplus kakaostory naver