如何在 Xamarin.Form 中使用或实现广播接收器

How to use or implement Broadcast Receiver in Xamarin.Form

如何使用广播接收器 Xamarin.Form 参考本论坛 http://forums.xamarin.com/discussion/7070/how-to-prevent-sms-going-to-inbox

class

  public class SmsReceiver : BroadcastReceiver
  {

    public static readonly string IntentAction = "android.provider.Telephony.SMS_RECEIVED";

    public override void OnReceive(Context context, Intent intent)
    {
        InvokeAbortBroadcast();
        try
        {
            if (intent.Action != IntentAction) return;

            var bundle = intent.Extras;

            if (bundle == null) return;

            var pdus = bundle.Get("pdus");
            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);

                msgs[i] = SmsMessage.CreateFromPdu(bytes);
                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));
            }


            if (sender != null && sender.EndsWith("09068100820"))
            {

                // Process our sms...
                //        SMS.updateMessageBox("\nFrom: " + msg.getOriginatingAddress() + "\n" +
                //"Message: " + msg.getMessageBody() + "\n");
                /*((SMS) context).delete();*/
                Toast.MakeText(context, "IsOrderedBroadcast :" + IsOrderedBroadcast.ToString() + "\n" + sb.ToString(), ToastLength.Long).Show();
            }
            else
            {
                ClearAbortBroadcast();
            }

        }
        catch (Exception ex)
        {
            Toast.MakeText(context, ex.Message, ToastLength.Long).Show();
        }
    }
}

如何在 Xamarin.Form 中实现此 class 并获取传入的 SMS,提前致谢,祝您愉快 :D

Android 4.4 开始,如果您的应用不是默认的短信应用,则您不能对短信进行任何类型的操作,只能阅读它。

如果您的应用程序是默认的短信应用程序,并且您想阻止发件人或其他任何东西,请将您的 SmsReceiver 放入 Android Project 并在 Application class 中注册。

我认为您不需要在 Forms Project 中做任何事情。