SmsManager.Default.SendTextMessage发送了太多sms-xamarin

时间:2014-07-01 04:54:09

标签: android mono

我有一个应用程序,它是一个活动和一个广播接收器,已经在清单中注册它,活动在某些时候被销毁。

这个广播接收者做的是它收听传入的短信,如果发送者与号码(用户在活动中指定的号码)相同,则会向该号码发送空的短信(两个号码相同) 。我用Android 2.3编译了它,但有2个问题。

1 - 应用程序收到一条消息后,会向该号码发送过多消息。

2 - abortbroadcast()不起作用。 这是我的广播接收器:

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 个答案:

答案 0 :(得分:0)

删除

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