在我的Android应用程序中,我正在使用SMS实现自动填充OTP,我从这个链接中学到了http://androiddhina.blogspot.in/2015/06/reading-incoming-message-automatically-to-verify-OTP.html
我怀疑是BroadcastReceiver
读取用户收到的每个短信,我们可以阻止这个吗?我需要在特定时间读取短信例如:只有在用户点击发送OTP按钮后才能停止读取短信。
请帮助我了解如何在特定时间段内启动和停止BroadcastReceiver
。
答案 0 :(得分:1)
试一试。
private BroadcastReceiver SmsListener = new BroadcastReceiver() {
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(
"android.provider.Telephony.SMS_RECEIVED")) {
Bundle bundle = intent.getExtras(); // ---get the SMS message
// passed in---
SmsMessage[] msgs = null;
// String msg_from;
if (bundle != null) {
// ---retrieve the SMS message received---
try {
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage
.createFromPdu((byte[]) pdus[i]);
// msg_from = msgs[i].getOriginatingAddress();
String msgBody = msgs[i].getMessageBody();
// do your stuff
}
} catch (Exception e) {
// Log.d("Exception caught",e.getMessage());
}
}
}
}
};
按照我的意思
@Override
protected void onPause() {
super.onPause();
YourActivity.this.unregisterReceiver(SmsListener);
};
@Override
protected void onResume() {
super.onResume();
IntentFilter i = new IntentFilter(
"android.provider.Telephony.SMS_RECEIVED");
YourActivity.this.registerReceiver(SmsListener, i);
}
但正如其他人所建议你可以在请求OTP后注册BroadcastReceiver并在获得OTP后注册。
快乐编码。
答案 1 :(得分:1)
您可以随时启用和禁用接收器。请尝试以下方法,
用于启用接收器
class DefaultTest{
int id;
String name;
void display(){System.out.println(id+" "+name);}
public static void main(String args[]){
DefaultTest s1=new DefaultTest();
DefaultTest s2=new DefaultTest();
s1.display();
s2.display();
}
}
用于解除接收器
public void enableSMSReceiver(Context context){
ComponentName component = new ComponentName(context, YOUR_RECEIVER.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(
component,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
答案 2 :(得分:1)
现在还有其他选项可以自动阅读OTP短信,其中您的应用只读取您的OTP短信,而且不需要用户授予任何权限。
<强> 1。在Google Play服务中使用SMS Retriever API:
https://developers.google.com/identity/sms-retriever/overview
https://www.youtube.com/watch?v=jzWYv8y2v1c
但这需要在OTP SMS格式中进行一些服务器级别的更改。这仅适用于安装了Play服务的设备。
<强> 2。在SmsManager类中使用createAppSpecificSmsToken(仅限Android O):
https://code.tutsplus.com/tutorials/android-o-phone-number-verification-with-sms-token--cms-29141
此功能仅适用于Android O,截至目前。