首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动OTP验证android xamarin

问自动OTP验证android xamarin
EN

Stack Overflow用户
提问于 2017-03-23 15:55:25
回答 2查看 2.3K关注 0票数 0

我正在使用Xamarin的安卓应用程序,其中服务器发送一个动态口令,用户需要在应用程序中输入这个动态口令,我的应用程序的SignUp。我想要的是,我的应用程序应该能够自动读取服务器发送的动态口令,并在动态口令编辑文本字段中填写。

我几乎读完了消息,但无法在编辑文本字段中设置动态口令。

SMS广播接收器类:

代码语言:javascript
复制
 [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();
     }
     }
 }

以下是我的主要活动:

代码语言:javascript
复制
 [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"));
  }
  }

我如何才能做到这一点?在这方面的任何帮助或指导都将受到高度赞赏。

更新

代码语言:javascript
复制
    public void onSMSReceived(string msgs)
    {
        EditText OtpNumber = (EditText)FindViewById(Resource.Id.editTextOtp);
        try
        {
            OtpNumber.SetText(msgs.ToString(),null);
        }
        catch (System.Exception ex)
        {

        }
    }
EN

回答 2

Stack Overflow用户

发布于 2017-03-23 16:10:55

你已经到了终点线。你只需要做这些事情:

  1. 创建一个接口,该接口将具有公共方法,使用上述创建接口从您的MainActivity.
  2. You中的
    1. 中接收的MainActivity中接收的短消息广播消息中,在您的MainActivity.
    2. You中的
      1. MainActivity onSMSReceived(String smsMsg)中完成该接口。
票数 0
EN

Stack Overflow用户

发布于 2017-03-26 13:50:01

我没有确切地知道你是怎么做的,但我用了两种方法,1.用户必须手动输入它,2.我们必须通过编程自动阅读,但我在自动阅读短信时遇到了一个问题,就像发送短信和阅读短信同时调用可能就像注册点击事件一样,我发现了另一种自动检测的方法,比如发送两次otp并将生成的otp存储在一个字符串列表中并与message.body进行比较这里的问题是我们必须发送两次otp,但我仍然在想办法在一段时间后如何调用阅读短信部分,,,!

如果您需要解决方案,请发送邮件给我,地址为sailokeshgoud@gmail.com

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42970169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档