我有活動,我有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