如题,网上看了一下教程,发现不能用,通知栏还是能显示短信。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
优先级再高也高不过系统广播。你需要做的是监听系统日志然后拦截他