android – 移动应用程序:如何在不离开我的应用程序的情况下显示我的应用程序在弹出窗口中发送的OTP?

前端之家收集整理的这篇文章主要介绍了android – 移动应用程序:如何在不离开我的应用程序的情况下显示我的应用程序在弹出窗口中发送的OTP?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们必须编写基于OTP的身份验证代码.我看过一些应用程序,比如我的银行应用程序,当它发送OTP时,它会立即快速弹出刚刚到达的短信,这样我就可以在不离开应用程序的情况下看到OTP.我只记住数字,关闭弹出窗口,继续在该应用程序内登录.

他们是怎么做到的?是否有一些我应该关注的iOS / Android规范,它允许我们类似地弹出OTP而无需用户必须转到SMS屏幕,然后回到我们的应用程序?谢谢!

编辑:我有非常有用的Android建议.现在正在寻找这些建议的iOS变体.了解iOS有更严格的沙盒限制,所以“听众”可能会更复杂?

解决方法

这是一步一步的描述,以实现您的要求

>在AndroidManifest中声明接收器

<receiver android:name=".IncomingSms">   
 <intent-filter>
      <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  </intent-filter>
</receiver>

2在AndroidManifest中提供阅读短信权限

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
 <uses-permission android:name="android.permission.READ_SMS" />

AndroidManifest.xml文件的完整代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidexample.broadcastreceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.androidexample.broadcastreceiver.BroadcastNewSms"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="com.androidexample.broadcastreceiver.IncomingSms">   
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

    </application>
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
    <uses-permission android:name="android.permission.READ_SMS" />


</manifest>

IncomingSms.java文件的完整代码

public class IncomingSms extends BroadcastReceiver {

    // Get the object of SmsManager
    final SmsManager sms = SmsManager.getDefault();

    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) {

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

                    String senderNum = phoneNumber;
                    String message = currentMessage.getDisplayMessageBody();

                    Log.i("SmsReceiver","senderNum: "+ senderNum + "; message: " + message);


                   // Show Alert
                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context,"senderNum: "+ senderNum + ",message: " + message,duration);
                    toast.show();

                } // end for loop
              } // bundle is null

        } catch (Exception e) {
            Log.e("SmsReceiver","Exception smsReceiver" +e);

        }
    }    
}

在您的活动中注册广播接收器,您将获得输出

猜你在找的Android相关文章