多个 SMS 广播接收器 edittext

multiple SMS broadcastreceiver edittext

通过 BroadcastReceiver 收到消息后,我将自动更新一个包含 6 个号码的编辑文本框,这些号码包含在 SMS 中。 我第一次可以成功,但我想第二次重新使用代码,但找不到这样做的方法。

public class SMSReceiver extends BroadcastReceiver {
private static EditText editTextInputNumber;
@Override
public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(
                "android.provider.Telephony.SMS_RECEIVED")) {
            StringBuilder sms = new StringBuilder();    
            Bundle bundle = intent.getExtras();        

            if (bundle != null) {
                Object[] pdusObj = (Object[])  bundle.get("pdus");
                SmsMessage[] messages = new SmsMessage[pdusObj.length];
                for (int i = 0; i < pdusObj.length; i++) {
                    messages[i] =
                            SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                }

                for (SmsMessage smsMessage : messages) {
                    sms.append(smsMessage.getMessageBody());
                }

                sms.toString(); 
                String smsBody = sms.toString();
                Pattern pattern = Pattern.compile("\d{6}");
                Matcher matcher = pattern.matcher(smsBody);
                String authNumber = null;

                if (matcher.find()) {
                    authNumber = matcher.group(0);
                }

                if (authNumber != null) {
                Activity_create.inputAuthNumber(authNumber);

I wish to use the above and change another edittext when some other activity is opened ex)Activity_findaccount.inputAuthNumber(authNumber);

            }
        }
    }
}

INSIDE Activity_Create 我在做:

...
sendBroadcast(new Intent("android.provider.Telephony.SMS_RECEIVED"));
...
public static void inputAuthNumber(String authNumber) {
    if (authNumber != null) {
        et_dialog_access.setText(authNumber);
    }
}

INSIDE Activity_findaccount 我也想用不同的 edittext 做同样的事情:

...
sendBroadcast(new Intent("android.provider.Telephony.SMS_RECEIVED"));
...
public static void inputAuthNumber(String authNumber) {
    if (authNumber != null) {
        et_find_access.setText(authNumber);
    }
}

UPDATE:ANSWER: SEE COMMENTS BELOW FROM MIKEM. and the checked answer

为什么注销很重要 = 防止泄露。

何时 register/unregister 遵循此 link: When to unregister BroadcastReceiver? In onPause(), onDestroy(), or onStop()?

My final coding Use this. instead of getActivity. if youre in class Activity

public class Fragment_findaccount1 extends Fragment{

BroadcastReceiver smsReceiver;
...
@Override
public void onPause(){
    super.onPause();
    getActivity().unregisterReceiver(smsReceiver);
}
...
private void SMS_Receive() {
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
    smsReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            StringBuilder sms = new StringBuilder();
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Object[] pdusObj = (Object[]) bundle.get("pdus");
                SmsMessage[] messages = new SmsMessage[pdusObj.length];
                for (int i = 0; i < pdusObj.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                }
                for (SmsMessage smsMessage : messages) {
                    sms.append(smsMessage.getMessageBody());
                }
                sms.toString();
                String smsBody = sms.toString();
                Pattern pattern = Pattern.compile("\d{6}");
                Matcher matcher = pattern.matcher(smsBody);
                String authNumber = null;
                if (matcher.find()) {
                    authNumber = matcher.group(0);
                }
                if (authNumber != null) {
                    inputAuthNumber(authNumber);
                }
            }
        }
    };
    getActivity().registerReceiver(smsReceiver, intentFilter);
}

private void inputAuthNumber(String authNumber) {
    if (authNumber != null) {
        et_cert.setText(authNumber);
        progressbar.setVisibility(View.INVISIBLE);
    }
}

如果您想在不同的活动中使用它,您需要在 Activity 中声明您的广播接收器。 `

private void registerOTPReceiver() {
    intentFilter = new IntentFilter();
    intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
    mOtpReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
            // Your Code goes here
            updateOtpText(matcher.group(0));
        }
    }
};
this.registerReceiver(mOtpReceiver, intentFilter);

private void updateOtpText(String otp){
    // Set the message text to wherever you want
    mOtpEditText.setText(otp);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    this.unregisterReceiver(mOtpReceiver);
}

`