마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 IPC에서 Binder나 Messenger 쓰는방법 문의

0 추천
서비스 바인더 예제 검색하면 한 앱에서 하는거밖에 안나오는데요

다른앱끼리 통신하는 방법중에 Messenger 로 하는게 있는데

참고할만한 예제를 못찾겠습니다.

 

바인더로 다른 앱간 통신이 가능해보이는데

bindservice()함수의 인자로 뭘 넣어줘야 하는지 잘 모르겠습니다.
애플리드 (190 포인트) 님이 2018년 7월 31일 질문

2개의 답변

0 추천
 
채택된 답변

사용법은 로컬 서비스랑 비슷합니다. 다만 AndroidManifest.xml에 선언할때 android:process=":remote" 적어 줘야합니다.

 

<service android:name="test.app.RemoteService

android:process=":remote"  

android:exported="true"

 <intent-filter> <action android:name="test.app.RemoteService" /> </intent-filter>

</service>

다른 앱인경우 즉 패키지가 다른경우

android:exported="true"

AIDL 선언한뒤에 사용해도 되고 Messenger를 사용해도 됩니다. 

( https://developer.android.com/guide/components/bound-services 참고) 인터넷에 검색하면 예제 많이 나옵니다.(http://www.marioalmeida.eu/2014/02/21/how-to-do-android-ipc-using-messenger-to-a-remote-service/)

바이드 호출할때 패키지 설정해 주시고(클래스 패키지가 아니라 어플리케이션 패키지), 액션설정하시고 호출하면 됩니다. 물론 서비스에 해당 액션에 대한 인텐트 필터를 설정해 주셔야합니다.

Intent intent = new Intent(); 

intent.setPackage("kr.luxsoft.test"); // 서비스를 포함하는 어플리케이션 패키지 이름

intent.setAction("test.app.RemoteService");  // 액션이름 , 다른것 설정해도 상관없습니다. 대신 인텐트 필터도 동일하게 설정해야합니다.

bindService( intent, mConnection, Context.BIND_AUTO_CREATE);

luxsoft (1,780 포인트) 님이 2018년 8월 1일 답변
애플리드님이 2018년 8월 2일 채택됨
0 추천
Messenger가 아니라 AIDL로 하는 방식이 있습니다. https://developer.android.com/guide/components/aidl 참고하세요.
회색 (21,340 포인트) 님이 2018년 8월 1일 답변
...