Android拦截系统收到短信,不在通知栏、短信列表显示

Android 码拜 9年前 (2016-05-19) 2414次浏览
如题,网上看了一下教程,发现不能用,通知栏还是能显示短信。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

优先级再高也高不过系统广播。你需要做的是监听系统日志然后拦截他

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Android拦截系统收到短信,不在通知栏、短信列表显示
喜欢 (0)
[1034331897@qq.com]
分享 (0)