Xamarin.android 自动OTP验证android xamarin

Xamarin.android 自动OTP验证android xamarin,xamarin.android,one-time-password,Xamarin.android,One Time Password,我正在使用Xamarin开发一个Android应用程序,其中服务器发送一个OTP,用户需要在应用程序中输入这个OTP,才能注册我的应用程序。我想要的是,我的应用程序应该能够自动读取服务器发送的OTP,并填写在OTP的编辑文本字段中 我几乎读完了邮件,但无法在编辑文本字段中设置otp SMS广播接收器类别: [BroadcastReceiver(Enabled = true, Label = "SMS Receiver")] [IntentFilter(new string[] { "andr

我正在使用Xamarin开发一个Android应用程序,其中服务器发送一个OTP,用户需要在应用程序中输入这个OTP,才能注册我的应用程序。我想要的是,我的应用程序应该能够自动读取服务器发送的OTP,并填写在OTP的编辑文本字段中

我几乎读完了邮件,但无法在编辑文本字段中设置otp

SMS广播接收器类别:

 [BroadcastReceiver(Enabled = true, Label = "SMS Receiver")]
 [IntentFilter(new string[] { "android.provider.Telephony.SMS_RECEIVED" })]
 public class SMSBroadcastReceiver : BroadcastReceiver
 {
     private const string IntentAction =   "android.provider.Telephony.SMS_RECEIVED";
 public override void OnReceive(Context context, Intent intent)
 {
       try
     {
          if (intent.Action != IntentAction) return;
          var bundle = intent.Extras;
         if (bundle == null) return;
         var pdus = bundle.Get("pdus");
          // var castedPdus = JNIEnv.GetArray(pdus.Handle);
          var castedPdus = JNIEnv.GetArray<Java.Lang.Object>(pdus.Handle);
           var msgs = new SmsMessage[castedPdus.Length];
          var sb = new StringBuilder();
         string sender = null;
          for (var i = 0; i < msgs.Length; i++)
              {
              var bytes = new byte[JNIEnv.GetArrayLength(castedPdus[i].Handle)];
                JNIEnv.CopyArray(castedPdus[i].Handle, bytes);
              string format = bundle.GetString("format");
             msgs[i] = SmsMessage.CreateFromPdu(bytes,format);
             if (sender == null)
                   sender = msgs[i].OriginatingAddress;
                sb.Append(string.Format("SMS From: {0}{1}Body: {2}{1}", msgs[i].OriginatingAddress,System.Environment.NewLine, msgs[i].MessageBody));
                Toast.MakeText(context, sb.ToString(), ToastLength.Long).Show();
           }
       }
       catch (System.Exception ex)
      {
             Toast.MakeText(context, ex.Message, ToastLength.Long).Show();
     }
     }
 }

你的队伍在终点线上。你只需要做以下几件事:

  • 创建一个接口,该接口将具有公共方法
    onsmreceived(字符串smsg)
  • 实例化该接口
  • MainActivity
    activity中实现该接口
  • 在MainActivity中重写OnSMReceived(字符串SMSG)
  • 使用上述创建的界面从SMS广播接收器通知MainActivity
  • 在MainActivity中的
    onsmreceived(字符串smsg)
    中填充收到的消息
  • 你完了

  • 我不知道你是怎么做的,但我有两种方法, 1.用户必须手动输入, 2.我们必须自动阅读整个程序, 但我在自动阅读短信时遇到了一个问题,比如发送短信和阅读短信同时呼叫可能就像注册点击事件一样,我找到了另一种自动检测的方法,比如发送两次OTP,将生成的OTP存储在字符串列表中,并与message.body进行比较 这里的问题是,我们必须发送两次otp,但我仍在考虑如何在某个时间后呼叫阅读短信部分


    如果你想要那个解决方案,请发邮件给我sailokeshgoud@gmail.com

    我尝试了这个方法,但对我不起作用。你能详细说明一下吗?谢谢你不理解的部分?按照你的建议实现了,但不起作用。你能提供示例代码吗?这将节省我的时间day@MohammedDastagir,你能分享你目前已经实现的代码吗?你是否创建了这样的接口
    Public interface iotPrevived Function onotprived(ByVal otp作为字符串)作为字符串结束接口
     [Activity(Label = "UserSms", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
     {
        protected override void OnCreate(Bundle bundle)
      {
           base.OnCreate(bundle);
    
            // Set our view from the "main" layout resource
           SetContentView (Resource.Layout.Main);
         SMSBroadcastReceiver smsReceiver = new SMSBroadcastReceiver();
         TextView msg = FindViewById<TextView>(Resource.Id.editTextOtp);
         Button btn = FindViewById<Button>(Resource.Id.button3);
            RegisterReceiver(smsReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
      }
      }
    
        public void onSMSReceived(string msgs)
        {
            EditText OtpNumber = (EditText)FindViewById(Resource.Id.editTextOtp);
            try
            {
                OtpNumber.SetText(msgs.ToString(),null);
            }
            catch (System.Exception ex)
            {
    
            }
        }