Android 仅为OTP阅读短信

Android 仅为OTP阅读短信,android,broadcastreceiver,Android,Broadcastreceiver,在我的android应用程序中,我通过短信实现了自动填写OTP,我从这个链接中学到了这一点 我的疑问是,BroadcastReceiver读取用户收到的每一条短信,我们可以停止吗?我需要在特定时间阅读短信示例:只有在用户单击发送OTP按钮之后,我才应该停止阅读短信 请帮助我如何在特定时间段内启动和停止广播接收器。试试这个 private BroadcastReceiver SmsListener = new BroadcastReceiver() { @SuppressWarn

在我的android应用程序中,我通过短信实现了自动填写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后取消注册

快乐的编码。

试试这个

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);
}