1

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

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

PS:模拟器一切正常。我已将优先级设置为“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();
   }

}
   }

在 android 清单文件中,

  <receiver android:name="SmsReceiver">
     <intent-filter android:priority="999999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
     </intent-filter>
  </receiver>

而已。所有其他权限均已正确使用。这在模拟器中工作正常。但不能在设备中工作。

4

0 回答 0