#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 ();
}