我正在使用Xamarin的安卓应用程序,其中服务器发送一个动态口令,用户需要在应用程序中输入这个动态口令,我的应用程序的SignUp。我想要的是,我的应用程序应该能够自动读取服务器发送的动态口令,并在动态口令编辑文本字段中填写。
我几乎读完了消息,但无法在编辑文本字段中设置动态口令。
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();
}
}
}以下是我的主要活动:
[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)
{
}
}发布于 2017-03-23 16:10:55
你已经到了终点线。你只需要做这些事情:
MainActivity中接收的短消息广播消息中,在您的MainActivity.MainActivity onSMSReceived(String smsMsg)中完成该接口。发布于 2017-03-26 13:50:01
我没有确切地知道你是怎么做的,但我用了两种方法,1.用户必须手动输入它,2.我们必须通过编程自动阅读,但我在自动阅读短信时遇到了一个问题,就像发送短信和阅读短信同时调用可能就像注册点击事件一样,我发现了另一种自动检测的方法,比如发送两次otp并将生成的otp存储在一个字符串列表中并与message.body进行比较这里的问题是我们必须发送两次otp,但我仍然在想办法在一段时间后如何调用阅读短信部分,,,!
如果您需要解决方案,请发送邮件给我,地址为sailokeshgoud@gmail.com
https://stackoverflow.com/questions/42970169
复制相似问题