2012-07-29 3 views
0

IntentService를 성공적으로 몇 번 사용해 왔지만 현재 응용 프로그램에서는 BroadcastReceiver의 onReceive()를 시작할 수 없습니다. IntentService의 Intent 액션에 정확한 문자열이 있고 onResume에 BroadcastReceiver와 함께 등록 된 IntentFilter에 있습니다.IntentService에서 무엇이 잘못 될 수 있습니까?

filter = new IntentFilter("com.currencyconverter2.intent.action.MESSAGE"); 
    Log.d("CC2", "intent filter created"); 
    filter.addCategory(Intent.CATEGORY_DEFAULT); 
    Log.d("CC2", "filter category added"); 
    receiver = new MessageReceiver(); 
    Log.d("CC2", "receiver instantiated"); 
} 

public void onResume(){ 
    super.onResume(); 
    registerReceiver(receiver, filter); 
    Log.d("CC2", "receiver registered"); 
} 

public void onPause(){ 
    super.onPause(); 
    unregisterReceiver(receiver); 
    Log.d("CC2", "receiver unregistered"); 
} 

public class MessageReceiver extends BroadcastReceiver{ 
    public void onReceive(Context context, Intent intent){ 
     Log.d(Tag, "entered onReceive..."); 
     String html = intent.getStringExtra("OUTPUT"); 
     webView.setBackgroundColor(Color.parseColor("#f4f36f")); 
     webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); 
    } 
} 

서비스도 Manifest.xml에 지정했습니다.

<service android:name=".IntentServiceTest"></service> 

내 로그인은 intentBroadcast가 IntentService에서 방송되고, 응용 프로그램이 중단 하더군요. BroadcastReceiver는 그것을받지 못한 것 같습니다. 무엇이 잘못 될 수 있습니까? 감사!

편집 :

내 IntentService

 Intent broadcastIntent = new Intent(); 
     Log.d(Tag, "setting intent action"); 
     broadcastIntent.setAction("com.currencyconverter2.intent.action.MESSAGE"); 
     Log.d(Tag, "adding intent category"); 
     broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
     Log.d(Tag, "putting intent extra"); 
     broadcastIntent.putExtra("OUTPUT", data.text()); 
     Log.d(Tag, "sending broadcast"); 
     sendBroadcast(intent); 

    }catch(Exception e){ 
     e.printStackTrace(); 
     //System.out.println("f"); 
    } 
} 

} 

편집 2 :

버그 발견.

      Intent broadcastIntent = new Intent(); 
     Log.d(Tag, "setting intent action"); 
     broadcastIntent.setAction("com.currencyconverter2.intent.action.MESSAGE"); 
     Log.d(Tag, "adding intent category"); 
     broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
     Log.d(Tag, "putting intent extra"); 
     broadcastIntent.putExtra("OUTPUT", data.text()); 
     Log.d(Tag, "sending broadcast"); 
     sendBroadcast(intent); 

sendBroadcast (broadcastIntent);가 있어야합니다. 대신.

<receiver android:name=".MessageReceiver"> 
<intent-filter> 
<action android:name="com.currencyconverter2.intent.action.MESSAGE" /> 
<category android:name="android.intent.category.Default" /> 
</intent-filter> 
</receiver> 

:

답변

0

IntentService의 것은 당신의 AndroidManifest.xml을 확인 사용^-^

+0

여전히 필터를 트리거하지 않습니다. 나는 IntentService를 사용했다. 틀린 것이 보이니? –

+0

그리고 이미 필터 및 수신기를 프로그래밍 방식으로 등록했습니다. 하지만 고마워! –

1

IntentService 사용이 작업을하고 그것을 차단,하지만 당신의 코드 파대로 실행 시간을 오래 사용하는 U 보인다 위해, Service 대신

관련 문제