簡體   English   中英

BroadcastReceiver僅觸發一次

[英]BroadcastReceiver fires only once

我有活動,在這里我有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);
}

你怎么看? 為什么只有在啟動活動並首次單擊按鈕時它才起作用?

嘗試以下方法:

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

你絕對不應該那樣做!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM