我搜索了很多,但沒有找到解決以下問題。Android - LocalBroadcast
語境:
- 我使用AsyncHttpResponseHandler對象來處理我所有的web服務 響應
- 如果我從WS特定錯誤代碼,我想表明一個警告對話框(無論活動當前顯示)
- 我認爲使用LocalBroadcastManager將是一個很好的解決方案,因爲HTTP處理程序不知道當前顯示的活動
問題: 執行完所有似乎需要的工作後,我的意圖從異步處理程序發送不會收到。
附加說明:
- ApplicationContext需要保存在我的StaticItems 類,它包含了所有的靜態數據,我需要在我的app.It是通過從應用
- 繼承的自定義類設置如果我從活動中廣播了意圖,則會觸發OnReceive事件
我事先感謝您提供任何幫助。
乾杯!
下面是我的一些代碼片段:
在HTTP處理程序
public class AsyncResponseHandler extends AsyncHttpResponseHandler {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
if(response != null && response.length > 0) {
CrvData data = JsonHelper.getCrvData(new String(response));
String code = data.getErrorCode();
if (!TextUtils.isEmpty(code) && code.equals(StaticItems.C_WS_OBSOLETE_VERSION_ERROR)) {
Intent intent = new Intent();
intent.setAction(StaticItems.BROADCAST_INTENT_MESSAGE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse(data.getValue()));
LocalBroadcastManager.getInstance(StaticItems.applicationContext).sendBroadcast(intent);
}
}
}
根系活力我用我的所有活動的代碼代碼:
public class MainActivity extends Activity {
/**
* The local broadcast receiver
*/
protected MyBroadcastReceiver mMessageReceiver = new MyBroadcastReceiver();
@Override
protected void onResume() {
super.onResume();
// register
IntentFilter filter = new IntentFilter();
filter.addCategory(Intent.CATEGORY_DEFAULT);
filter.addAction(StaticItems.BROADCAST_INTENT_MESSAGE);
LocalBroadcastManager.getInstance(StaticItems.applicationContext).registerReceiver(mMessageReceiver, filter);
}
@Override
protected void onPause() {
super.onPause();
// Unregister
LocalBroadcastManager.getInstance(StaticItems.applicationContext).unregisterReceiver(mMessageReceiver);
}
}
接收器
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setInverseBackgroundForced(true)
.setNegativeButton(context.getResources().getString(R.string.dlg_no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setIcon(R.drawable.ic_dialog_alert_holo_light)
.setMessage(R.string.dlg_app_is_obsolete)
.setPositiveButton(context.getResources().getString(R.string.dlg_yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
context.startActivity(intent);
}
});
builder.show();
}
}
發送廣播時,MainActivity仍在運行嗎? – Emil
你考慮過[EventBus](https://github.com/greenrobot/EventBus)嗎? – Knossos
@Boss由於當前顯示的活動是一個MainActivity(就像我的應用程序中的所有活動),是的,它是 – MarsNoToshi