2014-07-01 2 views
1

활동 인 앱과 매니페스트에 등록한 브로드 캐스트 수신기가 있는데 어느 시점에서 활동이 파괴되었습니다.SmsManager.Default.SendTextMessage가 너무 많은 sms-xamarin을 보냅니다.

브로드 캐스트 수신기의 기능은 들어오는 SMS를 수신하고 발신자가 활동 (사용자가 활동에서 지정한 번호)과 동일한 경우 빈 번호를 해당 번호로 보냅니다 (두 번호는 동일 함).). 안드로이드 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(); 
     } 

    } 
} 

}

답변

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