我搜索了很多,但未找到解决以下问题的方法。
背景:
问题: 在实现了使其工作所需的所有内容之后,我没有收到从异步处理程序发送的意图。
附加说明:
我提前感谢您提供的任何帮助。
干杯!
以下是我的一些代码:
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();
}
}
答案 0 :(得分:1)
我有一个类似的问题,由于某种原因,你不能通过LocalBroadcastManager返回Intent setData(..)
,当我把我的URI放在额外的数据中时,它开始工作......可能是一个bug?
答案 1 :(得分:0)
我的猜测是您使用的context
不是活动上下文,因此无法用于创建对话框。
即,在这种情况下传递给onReceive
的上下文应该是您的应用程序上下文StaticItems.applicationContext
, 不适合显示对话框。
如果是这种情况,您应该以某种方式重新安排代码,以确保传递活动上下文而不是应用程序。
答案 2 :(得分:0)
答案 3 :(得分:0)
好的......我发现因为这条线没有收到意图:
intent.setData(Uri.parse(data.getValue()));
正如@mvai指出的那样,无法从应用程序上下文中显示对话框。我设法通过在我的应用程序类中引用它来获取当前活动。 (我检查确定没有任何内存泄漏)