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>