gpt4 book ai didi

java - BroadcastReceiver 仅触发一次

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:00 25 4
gpt4 key购买 nike

我有一个 Activity ,其中有 EditText 供用户输入某些数据。用户编写一些文本并单击按钮后,他正在等待 BroadcastReceiver 的响应。问题是,第一次一切正常,用户收到响应,但如果用户不退出 Activity 并再次单击按钮,BroadcastReceiver 就不会再触发。如果用户关闭 Activity 并再次打开它,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);
}

你觉得怎么样?为什么它仅在 Activity 启动且第一次单击按钮时才起作用?

最佳答案

试试这个:

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

你永远不应该这样做!

关于java - BroadcastReceiver 仅触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25558864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com