我有活动,我有EditText供用户输入特定数据。用户写入一些文本并点击按钮后,他正在等待BroadcastReceiver的响应。问题是一切正常,用户收到回应,但如果用户没有退出活动并再次单击按钮,BroadcastReceiver不再发射。如果用户关闭活动并再次打开它,BroadcastReceiver将再次运行,但仅限于第一次。BroadcastReceiver只触发一次
这有点令人困惑。这里是我的代码:
public void onCreate(Bundle savedInstanceState) {
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent in) {
switch (getResultCode()) {
case Activity.RESULT_OK:
mStatus = true;
break;
}
}
};
getActivity().registerReceiver(mReceiver,
new IntentFilter(FLAG));
}
当用户点击按钮:
Intent in = new Intent(FLAG);
PendingIntent pIn = PendingIntent.getBroadcast(context, 1, in, 0);
SmsManager.getDefault().sendTextMessage("123456789", null, "text", pIn, null);
while(!mStatus){
}
mStatus = false;
注销接收器:
public void onPause() {
super.onPause();
getActivity().unregisterReceiver(mReceiver);
}
你怎么想的?为什么它只在活动开始并且按钮被第一次点击时才起作用?
您的意思是用户退出该活动,请返回并再次单击该按钮? – CChi 2014-08-28 22:17:58
@CChi,这有效。如果用户存在活动并返回,它就会起作用。问题在于,如果用户停留在活动中,并且想要点击按钮例如6次,则只有当他第一次点击该按钮时才有效。其他五次它不会做任何事情。 – user3339562 2014-08-28 22:19:48
不要在主线程上使用无限循环,即使使用了某人提出的“sleep()”。你不需要经常检查变量的状态。只要开始接收广播时从onReceive()中“等待”的任何代码即可。 – 2014-08-29 00:13:04