안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
com.test.A, com.test.B 독립적인 어플이 있습니다.
B 어플에서 버튼을 눌렀을때,
A 어플의 서비스가 실제 동작중인지 또는 A어플의 내부 변수값을 알수 있는 방법이 있을까요?
(컨텐츠 프로바이더를 사용하지 않고)
B 어플에서 아래와 같이 RunningService를 이용하면, A어플이 백그라운드로 떠 있기만 해도 true가 리턴되네요.
final String pkgname = "com.test.A";
ActivityManager activitymanager = (ActivityManager)getSystemService(this.ACTIVITY_SERVICE);
List<RunningServiceInfo>info = activitymanager.getRunningServices(50);
for(RunningServiceInfo i: info) {
if( pkgname.equals(i.service.getPackageName()) ) {
}
}
}
B어플에서 A로 서로 약속된 intent나 broadcast 를 날려서 리턴값을 받는 형식은 없을까요?
B에서 알고자하는 값은 A의 상태값 하나뿐이라
값하나만을 위하여 content provider를 만들어야 하는건 너무 부담스럽네요.
서비스 바인딩 해보셨는지요?
일반적인 서비스 바인딩은 자신의 앱안에 속한 서비스와 엑티비티가 서로 통신하는 방법이지요.
하지만 그 뿐만 아니라 이 바인딩을 통해서 자신의 앱이 아닌 다른 앱과 통신할수 있습니다.
자신 앱에서만 통신할때는 interface 를 이용하지만
다른 앱과 통신할때는 "AIDL(Android Interface description language) " 이란 것을 이용합니다.
이를 이용하면, A 앱에 속해있는 서비스의 메서드를 B 앱에서 호출하여 사용할수 있게 됩니다.
(메서드를 통해 두 앱이 데이터를 주고 받을수도 있겠죠)
바인딩을 해보시지 않았다면 바인딩에 대해서 먼저 공부를 하시고
"서비스 aidl" 이라는 키워드로 검색해보시면 자료가 나오지 않을까 합니다.