多个 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);
}
`
通过 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);
}
`