BroadcastReceiver只触发一次

时间:2014-08-28 22:15:09

标签: java android broadcastreceiver smsmanager

我有活动,我有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);
}
你怎么看?为什么它仅在活动开始并且第一次单击按钮时才起作用?

1 个答案:

答案 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){
}

你永远不应该那样做!