我的应用程序中有一个广播接收器,它在其中调用该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>
而已。所有其他权限均已正确使用。这在模拟器中工作正常。但不能在设备中工作。