Повторный вызов метода OnCreate()

221
21 апреля 2017, 17:45

При развертывании проекта (чтение sms-сообщений), после получения сообщения приложение открывается три раза. По-моему OnCreate() запускается несколько раз. Как исправить повторный запуск, чтобы при получении sms не запускался новый экземпляр, и выводился в одном окне в поле editText.

SMSBroadcastReceiver.cs

using Android.App;
using Android.Content;
using Android.Telephony;
namespace HelloApp
{
    // [BroadcastReceiver(Enabled = true, Label = "SMS Receiver")]
    [BroadcastReceiver]
    [IntentFilter(new[] { "android.provider.Telephony.SMS_RECEIVED" }, Priority = (int)IntentFilterPriority.HighPriority)]
    public class SMSBroadcastReceiver : BroadcastReceiver
    {
        //private const string IntentAction = "android.provider.Telephony.SMS_RECEIVED";
        public static readonly string IntentAction = "android.provider.Telephony.SMS_RECEIVED";
        public string verificationCode;
        public override void OnReceive(Context context, Intent intent)
        {
            if (intent.HasExtra("pdus"))
            {
                var smsArray = (Java.Lang.Object[])intent.Extras.Get("pdus");
                foreach (var item in smsArray)
                {
                    var sms = SmsMessage.CreateFromPdu((byte[])item);              
                    verificationCode = sms.DisplayMessageBody;
                    Intent otpIntent = new Intent(Application.Context, typeof(MainActivity));
                    context.StartActivity(otpIntent);
                }
            }
        }
    }
}

MainActivity.cs

using Android.App;
using Android.Widget;
using Android.OS;
using System;
using Android.Content;
namespace HelloApp
{
    [Activity(Label = "HelloApp", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        EditText edtext;
        SMSBroadcastReceiver smsReceiver;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Main);
            edtext = FindViewById<EditText>(Resource.Id.editText);
        }
        protected override void OnResume()
        {
            base.OnResume();
                if (null == this.smsReceiver)
                {
                    smsReceiver = new SMSBroadcastReceiver();
                    this.RegisterReceiver(this.smsReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
                }
                else
                {
                    edtext.Text = smsReceiver.verificationCode;
                }
        }
    }
}
READ ALSO
Как завершить tcp соединение для windows.networking.sockets windows phone 8.1 c#

Как завершить tcp соединение для windows.networking.sockets windows phone 8.1 c#

Как завершить tcp соединение для windowsnetworking

203
Обработка исключения InvalidOperationException (Windows Forms, C#)

Обработка исключения InvalidOperationException (Windows Forms, C#)

Вот стал вроде как простой вопросНеобходимо в windows forms получить изображение из видео потока

210
Как установить ms office на Azure Cloud Services?

Как установить ms office на Azure Cloud Services?

Я пишу сайт на которое пользователи загружают ms word документы, а сайт редактирует документы с помощью COMПоэтому мне нужно чтобы на сервере...

189
Получить данные из ответа на GET запрос

Получить данные из ответа на GET запрос

привет есть кодЯ отправляю запрос и в ответ получаю файл

186