Activity에서 Service에 있는 뭔가를 실행할려면, aidl에 메서드를 정의해서 Activity에서 호출을 하면 되는데...
역으로 Service에서 Activty에 있는 메서드를 호출하려면 어떻게 해야 하나요?
인터페이스를 만들어서 aidl에서 사용하려고 했더니, 제가 만든 인터페이스는 알 수 없는 타입이라고 나와버리네요.
Activty에서 Service로 요청을 하는 것은 가능한데, Service에서 Activity로 요청하는 방법은 있는지요?
class AActivity extends Activity {
...
public Bservice mService;
public ServiceConection connection = new ServiceConnection() {
public void void onServiceConnected(ComponentName className, IBinder service) {
mService = ((BService.BServiceBinder)service).getService();
mService.registerCallback(mCallback);
}
public void onServiceDisconnected(ComponentName className) {
mService = null;
}
...
private BService.ICallback mCallback = new BService.ICallback() {
public void sendData(...) {
/* 서비스에서 데이터를 받아 메소드 호출 또는 핸들러로 전달 */
....
}
};
}
class BService extends Service {
....
public class BServiceBinder extends Binder {
BService getService() {
return BService.this;
}
}
...
private final IBinder mBinder = new BServiceBinder();
public interface ICallback {
public void sendData(...);
}
private ICallback mCallback;
public void registerCallback(ICallback cb) {
mCallback = cb;
}
....
/* 서비스에서 액티비티로 데이터를 보내는 부분 */
if (mCallback != null)
mCallback.sendData(...);
...
}
이벤트 핸들러 리스너 만들어서 등록하는 방법도 있고..