如题,网上看了一下教程,发现不能用,通知栏还是能显示短信。abortBroadcast()没效果啊?为什么,要怎么解决?
代码:
代码:
package com.cch.receiver;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.cch.database.DatabaseUtils;
import com.cch.database.DatabaseUtils1;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
abortBroadcast();
//this.
Bundle bundle = intent.getExtras();
if (bundle != null) {
// 通过pdus获得接收到的全部短信消息,获取短信内容;
Object[] pdus = (Object[]) bundle.get("pdus");
// 构建短信对象数组;
SmsMessage[] mges = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
// 获取单条短信内容,以pdu格式存,并生成短信对象;
mges[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
for (SmsMessage mge : mges) {
String number = mge.getDisplayOriginatingAddress();
System.out.println("XXXXXXXXXXXXXXXXX"+number);
if(DatabaseUtils.isInRollOutList(number)) {//在数据库中查询能否在拦截列表中
System.out.println("XXXXXXXXXXXXXXXXXXXXXXXtrue");//能显示这句
abortBroadcast();//这句没效果,系统还是收到了。为什么?
String body = mge.getDisplayMessageBody();
Date date = new Date(mge.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String sendtime = format.format(date);// 获取短信发送时间;
DatabaseUtils1.insertIntoRollOutList(number, body, sendtime);//往数据库写入拦截短信内容
//this.abortBroadcast();
} else {
}
}
}
}
}
}
优先级射得很高了,这个测试在虚拟机上也是一样的没效果。
<receiver android:name="com.cch.receiver.MyReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
解决方案
40
优先级再高也高不过系统广播。你需要做的是监听系统日志然后拦截他