Android 取消接收SMS的广播不会';我不能在设备里工作

Android 取消接收SMS的广播不会';我不能在设备里工作,android,broadcastreceiver,sms,Android,Broadcastreceiver,Sms,我的应用程序中有一个广播接收器,它调用abortBroadcast()方法。因此,它会取消接收短信的广播,并检查特定内容是否可用。如果可用,应用程序将执行一些任务,否则将调用clearAbortBroadcast()方法继续向收件箱广播SMS。我还在清单文件中设置了一个更高的值作为优先级 我正在使用android 2.2版本开发应用程序。模拟器一切正常,它为我提供了预期的结果。但是,当我在具有4.0.4版(ICS)的手机上测试应用程序时,它不起作用。消息广播取消不会发生,每个接收到的包含特定内容

我的应用程序中有一个广播接收器,它调用
abortBroadcast()
方法。因此,它会取消接收短信的广播,并检查特定内容是否可用。如果可用,应用程序将执行一些任务,否则将调用
clearAbortBroadcast()
方法继续向收件箱广播SMS。我还在清单文件中设置了一个更高的值作为优先级

我正在使用android 2.2版本开发应用程序。模拟器一切正常,它为我提供了预期的结果。但是,当我在具有
4.0.4版(ICS)
的手机上测试应用程序时,它不起作用。消息广播取消不会发生,每个接收到的包含特定内容的短信都会像普通短信一样到达收件箱

附言:仿真器一切正常。我已将优先级设置为“999999”。所有权限都已包括在内

下面是代码片段

public class SMSReciever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {

   this.abortBroadcast();

   final String pinNumber = "abcd";
   Bundle bundle = intent.getExtras();
   SmsMessage[] msgs = null;
   String smsMsg = "";
   String replyPhoneNum = "";

   if(bundle != null)
   {
       Object[] pdus = (Object[])bundle.get("pdus");
       msgs = new SmsMessage[pdus.length];

       for(int i=0; i<msgs.length; i++)
       {
           msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
           smsMsg += "SMS From " + msgs[i].getOriginatingAddress();
           smsMsg += "\n";
           smsMsg += msgs[i].getMessageBody().toString();
           smsMsg += "\n";
           replyPhoneNum = msgs[i].getOriginatingAddress();
       }
   }

   if(smsMsg.contains("SecretCode: "+pin+"\n"))
   {

       String[] splitMsg = smsMsg.split("\\n");
       String[] splitFeatures;

       Bundle b = new Bundle();
       splitMsg = smsMsg.split("\\n");

       for(int i=0; i<splitMsg.length; i++)
       {
          if(!(splitMsg[i].equalsIgnoreCase("null")))
          {
           splitFeatures = splitMsg[i].split(":");             

           if(splitFeatures[0].equals("Contact Number"))
           {
               String contactName = splitFeatures[1];
               b.putString("contactname", contactName);     
           }         

          }

          if(splitMsg[i].contains("email"))
          {
              String email = "email";
              b.putString("email", email);
          }
       }

       b.putString("replyPhoneNum", replyPhoneNum);

       Intent i = new Intent(context, NextActivity.class);
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       i.putExtras(b);
       context.startActivity(i);

   } 
   else
   {
       this.clearAbortBroadcast();
   }

}
   }
公共类SMSReciever扩展广播接收器{
@凌驾
公共void onReceive(上下文、意图){
这个.abortBroadcast();
最终字符串pinNumber=“abcd”;
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
字符串smsg=“”;
字符串replyPhoneNum=“”;
if(bundle!=null)
{
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];

对于(int i=0;i为您的接收者保存代码)您的接收者代码是否被调用(在ICS上)?你在什么地方注册你的接收者?@FoamyGuy:我已经发布了我使用的代码。@Oren在ICS上没有这种情况发生。接收短信直接进入短信收件箱。你已经确定设备上没有其他第三方短信应用程序了吗?例如,Handcent会以比你更高的优先级进行拦截。
  <receiver android:name="SmsReceiver">
     <intent-filter android:priority="999999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
     </intent-filter>
  </receiver>