在安卓广播中,实现收到短信,弹窗按确定页面跳转,收到短信后程序异常退出,行到ccc1,我的代码错在哪?

@OverridepublicvoidonReceive(Contextcontext,Intentintent){System.out.println("intent.... @Override
public void onReceive(Context context, Intent intent)
{
System.out.println("intent.extras=" + intent.getExtras());
Bundle bundle = intent.getExtras();
Object[] objs = (Object[]) bundle.get("pdus");
for (int i = 0; i < objs.length; i++)
{
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) objs[i]);
if ("10001".equals(smsMessage.getOriginatingAddress()))//省钱用10001
{
System.out.println("aaaaaaaaaaaaa1");
Toast.makeText(context, smsMessage.getMessageBody(), 1).show();
AlertDialog.Builder builder = new AlertDialog.Builder(context);
System.out.println("bbbbbbbbbbbb1");
builder.setMessage("发现银行余额变更短信,是否进行记账?");
builder.setTitle("提示");
System.out.println("cccccccc1");
builder.setPositiveButton("确认", new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
System.out.println("dddddddddddd1");
dialog.dismiss();
Intent intent = new Intent(context, BillAddActivity.class);//此处报错,要求将context改成final的,但改了之后出现问题中描述的情况
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
System.out.println("eeeeeeeeeeeeeeeeeeeee1");
builder.setNegativeButton("取消", new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
});
System.out.println("fffffffffffff1");
builder.create().show();
System.out.println("gggggggggggggggggg1");
}
}
}
展开
 我来答
锺芮0G30d3
2016-06-06 · TA获得超过628个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:160万
展开全部
在非Activity中显示Dialog是需要设置window type的, 否则就会运行报错。
dialog = builder.create()

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.show()

需要注意的是TYPE_SYSTEM_ALERT还要申请权限, <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

另外, context改成final 是因为在匿名内部类中需要保证使用的变量是final的, 可以这么理解,广播接收器的生命周期是onReceive执行完就结束了, 此时Dialog还要显示, 需要用到context, 必须确保context不改变,这是java设计者用来保证数据一致性的, 以及变量在onReceive执行完后,context还可以访问到。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式