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>
:
여전히 필터를 트리거하지 않습니다. 나는 IntentService를 사용했다. 틀린 것이 보이니? –
그리고 이미 필터 및 수신기를 프로그래밍 방식으로 등록했습니다. 하지만 고마워! –