목차
[서버 측]
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에서 볼 수 있습니다.
[Android] error: failed linking file resources. (0) | 2019.09.10 |
---|---|
[유용한 팁] AndroidManifest에 Gradle 빌드 변수 삽입하는 2가지 방법 (0) | 2018.08.19 |
공식 문서 기반의 Kotlin 한글 정리 (0) | 2017.10.31 |
JAR, AAR, DEX, APK 차이점 (0) | 2017.03.01 |
Drawable의 mutate함수 (0) | 2016.11.28 |