我有活动,我有EditText供用户输入某些数据。用户写入一些文本并单击按钮后,他正在等待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);
}
你怎么看?为什么它仅在活动开始并且第一次单击按钮时才起作用?
答案 0 :(得分:0)
请改为尝试:
public void onPause() {
super.onPause();
// getActivity().unregisterReceiver(mReceiver);
}
public void onDestroy() {
super.onDestroy();
getActivity().unregisterReceiver(mReceiver);
}
说明:您应该在onCreate()
/ onDestroy()
或onResume()
/ onPause()
(相应的生命周期事件)中管理接收方。
编辑:也进行此更改(第二行设置flag
参数):
Intent in = new Intent(FLAG);
PendingIntent pIn = PendingIntent.getBroadcast(context, 1, in, PendingIntent.FLAG_UPDATE_CURRENT);
SmsManager.getDefault().sendTextMessage("123456789", null, "text", pIn, null);
不确定这是否会修复它,因为我不知道0对于标志值是什么意思。 FLAG_UPDATE_CURRENT
似乎是正确的。
编辑2 :
while(!mStatus){
}
你永远不应该那样做!