안녕하세요...
프로그램이 돌면서 서비스가 실행이 되는데
activity 에서 실행하면 oncreate에서
Intent intentSvc = new Intent(this, MsgPushService.class);
startService(intentSvc);
registerReceiver(receiver, new IntentFilter(MsgPushService.MSG_RECEIVER));
bindService(new Intent(Main.this,
MsgPushService.class), mConnection, Context.BIND_AUTO_CREATE);
이런식으로 서비스를 실행하고 또한 activity 에서 bindservice를 이해서서 서비스에 있는 함수에 접근할수 있습니다.
하지만 반대로 서비스에서 activity에 있는 특정 함수에 접근하고 싶은데
방법을 모르겠습니다..
서비스단에서 지속적으로 화면단에 값을 쓰고 싶어서요
처리방법이나 자료 부탁드립니다. 몇일동안 방법을 찾고 있는데 잘 안되네요..
그럼 수고하세요
며칠전에 비슷한 답글을 달았는데요. http://www.androidpub.com/1771800#comment_1773463
첫번째 방법은 broadcast 이벤트를 보내는 방법입니다.
서비스에서는 intent 에 정보를 실어 sendBroadcast 하고 액티비티에서는 BroadcastReceiver 를 구현하여 받으면 됩니다.
아래 링크는 블루투스 서비스를 구현하여 액티비티와 통신하는 예제입니다. AmarinoService.java 의 sendBroadcast 부분과
MainScreen.java 의 BroadcastReceiver 부분을 보세요.
http://code.google.com/p/amarino/source/browse/trunk/amarino/src/at/abraxas/amarino/
두번째 방법은 서비스에 콜백함수를 등록하여 호출하는 방법입니다.
소스코드는 apidemos 의 RemoteService.java (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html ) 을 참고하면 되는데,
"다른" 프로그램들 간이 아니라 "같은" 프로그램내에서 서비스와 액티비티 간에 정보를 주고받을 거라면
굳이 IRemoteService AIDL을 사용할 필요가 없고 로컬 바인더(http://developer.android.com/guide/topics/fundamentals/bound-services.html )를 만들어 쓰시면 됩니다.
서비스에서 지속적으로 Activity(화면단)에 접근하는 것보다
Activity(화면단)에서 서비스에 지속적으로 값을 등록하는 것은 어떨까요? (바인더를 통해서)
아니면 Activity에서 서비스에 리스너를 등록해 두고,
그 리스너 내부에서는 특정 값을 반환하는 메소드들을 정의해 두는 것도 방법일 것 같습니다.