我有一个应用程序,它是一个活动和一个广播接收器,已经在清单中注册它,活动在某些时候被销毁。
这个广播接收者做的是它收听传入的短信,如果发送者与号码(用户在活动中指定的号码)相同,则会向该号码发送空的短信(两个号码相同) 。我用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 ();
}
}
}
}
答案 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 ();
}