Android 仅为OTP阅读短信
在我的android应用程序中,我通过短信实现了自动填写OTP,我从这个链接中学到了这一点 我的疑问是,Android 仅为OTP阅读短信,android,broadcastreceiver,Android,Broadcastreceiver,在我的android应用程序中,我通过短信实现了自动填写OTP,我从这个链接中学到了这一点 我的疑问是,BroadcastReceiver读取用户收到的每一条短信,我们可以停止吗?我需要在特定时间阅读短信示例:只有在用户单击发送OTP按钮之后,我才应该停止阅读短信 请帮助我如何在特定时间段内启动和停止广播接收器。试试这个 private BroadcastReceiver SmsListener = new BroadcastReceiver() { @SuppressWarn
BroadcastReceiver
读取用户收到的每一条短信,我们可以停止吗?我需要在特定时间阅读短信示例:只有在用户单击发送OTP按钮之后,我才应该停止阅读短信
请帮助我如何在特定时间段内启动和停止广播接收器。试试这个
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());
}
}
}
}
};
但正如其他人所建议的,您可以在请求OTP后注册BroadcastReceiver,在获得OTP后取消注册
快乐的编码。试试这个
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());
}
}
}
}
};
但正如其他人所建议的,您可以在请求OTP后注册BroadcastReceiver,在获得OTP后取消注册
快乐编码。您可以随时启用和禁用接收器。试试下面的方法
用于启用接收器
解散接管人
您可以随时启用和禁用接收器。试试下面的方法
用于启用接收器
解散接管人
现在有其他选项可以自动读取OTP短信,你的应用程序只读取你的OTP短信,这不需要用户授予任何权限
1。在Google play服务中使用短信检索器API:
但这需要对OTP SMS格式进行一些服务器级更改。这只适用于安装了播放服务的设备
2。在SmsManager类中使用createAppSpecificSmsToken(仅限Android O):
目前,这只适用于Android O。现在有其他选项可以自动读取OTP短信,其中您的应用程序只读取您的OTP短信,不需要用户授予任何权限
1。在Google play服务中使用短信检索器API:
但这需要对OTP SMS格式进行一些服务器级更改。这只适用于安装了播放服务的设备
2。在SmsManager类中使用createAppSpecificSmsToken(仅限Android O):
到目前为止,这只适用于Android O。以编程方式注册和注销接收器。您可以在sen OTP上注册接收器,并在获得OTP后注销接收器。或者你可以阅读特定号码的短信。我知道,请提供一些例子以便更好地理解。谢谢你:)你可以在你的短信上运行一个regx来检查它是否包含短信otp,然后得到它。不管怎样,我正在阅读每一条短信,对吗??查看链接,如果条件是读取otp,那不是我的问题,我需要停止BroadcastReceiver@SaravInfernRegister并以编程方式注销你的接收器。你可以在sen otp上注册接收器&在获得otp后注销接收器。或者你可以阅读特定号码的短信。我知道,请提供一些例子以便更好地理解。谢谢你:)你可以在你的短信上运行一个regx来检查它是否包含短信otp,然后得到它。不管怎样,我正在阅读每一条短信,对吗??查看链接,如果有条件阅读otp,那不是我的问题,我需要停止BroadcastReceiver@SaravInfernThank you,我根据我的用法修改了你的代码:)谢谢,我根据我的用法修改了你的代码:)
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);
}
public static void disableSMSReceiver(Context context){
ComponentName component = new ComponentName(context, YOUR_RECEIVER.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(
component,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}