0

ブロードキャスト レシーバーによって傍受された SMS が、abortBroadcast() を使用しているにもかかわらず、受信トレイに送信されています。この問題は、unRegisterReceiver() を使用する場合にのみ発生します。登録を解除しないと、abortBroadcast は正常に機能します。中止してから登録を正常に解除する方法についてのアイデアはありますか? コードは次のとおりです。

私の主な活動では、ブロードキャスト レシーバー オブジェクトを宣言しました。

SmsReceiver BR_smsreceiver = null;

次に、ブロードキャスト レシーバーを登録し、メイン アクティビティの関数内から SMS を送信します。

public Boolean sendVerificationSms(String number) {
BR_smsreceiver = null;
BR_smsreceiver = new SmsReceiver();
BR_smsreceiver.setMainActivityHandler(this);
IntentFilter fltr_smsreceived = new IntentFilter(
        "android.provider.Telephony.SMS_RECEIVED");
registerReceiver(BR_smsreceiver, fltr_smsreceived);

SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, "hi", null, null);
}

ブロードキャスト レシーバーは SMS をインターセプトし、メイン アクティビティ内の関数を呼び出します。

public class SmsReceiver extends BroadcastReceiver {

    MainActivity main = null;

    void setMainActivityHandler(MainActivity main){
        this.main=main;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle pdusBundle = intent.getExtras();
        Object[] pdus=(Object[])pdusBundle.get("pdus");
        SmsMessage messages=SmsMessage.createFromPdu((byte[]) pdus[0]);
        if(messages.getMessageBody().contains("hi")){
            abortBroadcast();
            main.verifyPhoneNumber("hi");

        }

    }
}

この関数は、ブロードキャスト レシーバーの登録を解除し、いくつかの処理を行います。

public void verifyPhoneNumber(String number) {
        unregisterReceiver(BR_smsreceiver);
        ...
}
4

2 に答える 2