2011-03-02 7 views
0

백그라운드에서 웹 검색을 수행하는 서비스를 시작하는 주 활동이 있으며 검색이 완료되면 주 활동이 의도를 얻길 바랍니다. 내 주요 활동에서의도가 활동에 의해 수신되지 않았습니다.

, 내가 의도 "검색의 말"을들을 수있는 브로드 캐스트 리시버와 인 텐트 필터를 정의 : 서비스에서

public class AgeRage extends Activity { 


    // Listener to all results from background processes 

    BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(ImageSearchService.SEARCH_RESULT_ACTION)) { 
0); 
       Toast.makeText(context,"Got " + i + "results", Toast.LENGTH_SHORT).show(); 
      } 
      else Toast.makeText(context,"unknown intent", Toast.LENGTH_SHORT).show(); 


     } 
    }; 

    IntentFilter receiverFilter = new IntentFilter(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 


     // Register to image search service messages 

     receiverFilter.addAction(ImageSearchService.SEARCH_RESULT_ACTION); 
     registerReceiver(receiver,receiverFilter); 

     ... 

, 나는 검색을 수행하고 완료, I 의도 보내기 :

public class ImageSearchService extends IntentService { 

... 

protected void onHandleIntent (Intent intent) { 

... doing search ... 

    Intent i = new Intent (this,AgeRage.class); 
    i.setAction (SEARCH_RESULT_ACTION); 
    i.putExtra(SEARCH_STATUS, (searchStatus ==SearchStatus.DONE) ? true:false); 
    i.putExtra (SEARCH_RESULT_NUM, totalResultNum); 
    i.putExtra (SEARCH_ID, searchID); 
    sendBroadcast (i,null); 
} 

그러나 주 활동은 의도를 얻지 못합니다. sendBroadcast가 호출되고 수신자의 OnReceive가 디버거로 검사되지 않음을 알고 있습니다.

동적으로 필터를 만들었으므로 매니페스트 파일에 필터를 정의 할 필요가 없다고 가정합니다.

내가 잘못 했나요?

감사 이삭

+1

잘 모르시겠습니까? 서비스 상호 작용이 실제로 필요 이상으로 복잡해지고 있습니다. 서비스는 로컬 서비스이므로 직접 통화하고 Intent를 브로드 캐스트하고 수신자와 청취 할 필요없이 완료되면 활동을 알리십시오. 체크 아웃 http://stackoverflow.com/questions/3197335/android-restful-api-service/3197456#3197456 –

+0

고마워, 난 그냥 수신기와 함께 작동하도록 코드를 변경하고 완벽하게 작동합니다. –

+0

주제에 대한 토론이 에 있습니다. http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android –

답변

0

좋아. 그럼 난 그냥 내 확인하고 우리는 ... 그러나, 그것을

ImageSearchService.SEARCH_RESULT_ACTION을 같은 방법으로하고있다

SEARCH_RESULT_ACTION 공공 정적 문자열 변수입니다 com.yourpackagename.ImageSearchSrvice.SEARCH_RESULT_ACTION

을하고 시도 . 도움이되는지 확인하십시오.

나는 ACTION의 이름이어야한다고 생각한다. 또한 breakpoint를 실행하고 로그를 확인하기를 원할 수도 있습니다. int.getAction()을 수행하고 if 문 내부를 검사하는 대신 이것을 인쇄하십시오. 그냥 언제나 그것을 출력하고보세요. Broacast 리시버 내부에서 침입 할 필요가 없습니다. 잠시 후 충돌합니다.

관련 문제