곰돌푸우❤️

[서버 측]

 

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