SmsManager.По умолчанию.sendTextMessage отправляет слишком много sms-сообщений-xamarin

#android #mono

#Android #моно

Вопрос:

У меня есть приложение, которое является действием, и широковещательный приемник, который зарегистрировал его в манифесте, и в какой-то момент действие уничтожается.

Что делает этот широковещательный приемник, так это то, что он прослушивает входящие SMS, и если отправитель совпадает с номером (который пользователь указывает в действии), он отправляет пустое SMS на этот номер (оба номера одинаковы). Я скомпилировал его с Android 2.3, но есть 2 проблемы.

1 — Приложение отправляет слишком много сообщений на этот номер после получения одного сообщения.

2 — Прерывание трансляции () не работает. Это мой широковещательный приемник:

 namespace SmsBroadcastReceiver
{
[BroadcastReceiver]
[IntentFilter(new string[] {    "android.provider.Telephony.SMS_RECEIVED" }, Priority = Int32.MaxValue)]
public class SmsReceiver : BroadcastReceiver
{
    public override void OnReceive (Context context, Intent intent)
    {

        ISharedPreferences pref =  PreferenceManager.GetDefaultSharedPreferences (context);
        string number = pref.GetString ("Number", "0");

        Bundle b= intent.Extras;
        var pdus = b.Get("pdus");
        var castedPdus = JNIEnv.GetArray<Java.Lang.Object>(pdus.Handle);
        var bytes = new byte[JNIEnv.GetArrayLength(castedPdus[0].Handle)];
        JNIEnv.CopyArray(castedPdus[0].Handle, bytes);
        SmsMessage msg= SmsMessage.CreateFromPdu (bytes);

        if (msg.OriginatingAddress == number) {
            //send empty sms

            SmsManager.Default.SendTextMessage (msg.OriginatingAddress, null, "Empty", null, null);
            InvokeAbortBroadcast ();
        }

    }
}
  

}

Ответ №1:

Удалить

 SmsManager.Default.SendTextMessage (msg.OriginatingAddress, null,"Empty", null, null);
  

это должно решить вашу проблему.

 if (msg.OriginatingAddress == number) {
  //send empty sms
  //Remove /Comment below statement from your code.`enter code here`
  SmsManager.Default.SendTextMessage (msg.OriginatingAddress, null, "Empty", null, null);
  InvokeAbortBroadcast ();
}