테스트위해 간단하게 짠겁니다..^^

소스 :
(불펌 방지 암호필요:댓글 달아주시면 암호 보내드립니다.^^)

왕초보가 왕초보님께 드리는 팁입니다.

단계
1.어떤 A라는 Activity를 실행시켰습니다.(화면에 계속 보여주고 있는 상태)
2.그리고 A가 서비스를 실행시켰습니다.
3.그리고 바인딩시켰습니다..서비스 퍼블릭된 자원을 맘껏 쓰고 있습니다...
4.그런데 막상 다시 서비스가 지금 보여주고 있는 화면에 값을 넘겨주고 싶을때가 있더군요.
5.그럴때 이용하는 방법입니다.

1.A Activity를 실행해서 버튼 클릭하면 PendingIntent를 보냅니다.그냥 Intent를 보내도 무방함(물론 서비스도 실행된상태임)
01.PendingIntent pIntent = 
02.     PendingIntent.getService(getBaseContext(), 0, 
03.       new Intent(ExamService.ACTION_FILTER), PendingIntent.FLAG_ONE_SHOT);
04.    try {
05.     pIntent.send();
06.    } catch (Exception e) {
07.     // TODO: handle exception
08.     e.printStackTrace();
09.    }
10.  
11.//브로드 리시버 등록
12.        this.registerReceiver(receiver, new IntentFilter(ExamService.ACTION_FILTER));

2.서비스 내에선 데이타 담아서 방송해줍니다.
1.super.onStart(intent, startId);
2.    
3.  //PendingIntent에 Intent 첨부해서 보내므로 바로 인자로 넣어주면 실행됨
4.  intent.putExtra("msg", "안드로이드가 맛있다눈!!^^");
5.    
6.  this.sendBroadcast(intent);
7.    
8.  this.onDestroy();

3.그럼 다시 A라는 Activity에서 방송을 받아서 맴버 메소드를 실행시킵니다.

01.private BroadcastReceiver receiver = 
02.     new BroadcastReceiver(){
03.   @Override
04.   public void onReceive(Context context, Intent intent) {
05.    // TODO Auto-generated method stub
06.    process.append("SERVICE BROADCATING THIS!!\n");
07.    String msg = intent.getStringExtra("msg");
08.    if(msg!=null)
09.     doProcess(msg);
10.    process.append("IT'S DONE!!\n");
11.   }     
12.    };


이런식으로 서비스에서 보여주고 있는 Activity에 데이타를 담아서 메소드를 실행시킵니다.

물론 aidl를 이용하면 더 효율적이라는 데..아무리 봐도 잘 이해가 안가네요..(제수준에선)^^

아무튼 저랑 같이 고민하고 있는 분들을 위해서 적어봤습니다.

풀소스는 제 블로그( http://javaexpert.tistory.com )에서 받을수 있습니다.

오늘도 수고하세요^^

+ Recent posts