【发布时间】:2016-09-15 12:46:17
【问题描述】:
我有一个BroadcastReceiver 类,它读取传入的sms 并从sms 中提取一个pin。
我想将 sms 传递给用户已经可见的活动。
用户应在EditText 中输入引脚,我从EditText 中获取值,将用户输入的引脚与BroadcastReceiver 传递的引脚进行比较。如果两者相互匹配,用户可以进入应用程序。但我不知道如何将BroadcastReceiver收到的Pin传递给Activity。
这是代码
BroadcastReceiver 类
public class IncomingMessage extends BroadcastReceiver {
final SmsManager sms = SmsManager.getDefault();
private OnSMSReceived onSMSReceived = null;
@Override
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
String senderNum = null;
String message = null;
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
senderNum = phoneNumber;
message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: " + senderNum + "; message: " + message);
}
if (senderNum.equals("ideamart")) {
Log.d("MessageIdeaMart", message);
} else if (senderNum.equals("FindDroid")) {
if (message.startsWith("Welcome")) {
String[] splitArray = message.split(" ");
String pin = splitArray[7];
Log.d("PIN", pin);
}
}
}
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" + e);
}
}
public void setOnSmsReceivedListener(Context context) {
this.onSMSReceived = (OnSMSReceived) context;
}
public interface OnSMSReceived {
void onSMSReceived(String pin);
}
}
【问题讨论】:
-
嘿,只需在您所需的活动中创建一个广播接收器类。分别在 onResume 和 onPause 中注册和取消注册。现在,当您当时发送广播时,使用与创建内部活动时对广播相同的操作。
标签: android android-activity broadcastreceiver