Android APP: BlackContact 短信拦截
2015-11-02 11:42
274 查看
由于 4.2版本后已经取消了 abortBroadcast() 的功能, 所以在实现这功能的时候需要先将原有 Message APP 中的 notification 功能 disable, 方法如下截图:
接着编写用来接受 Message 的 broadcast 类 SmsReceiver.java
并在AndroidManifest.xml 宣告权限
以下为测试展示:
当用黑名单号码发短信时, 没有反应
当用另外一个号码发短信时, 会提示发送的号码及内容
Done!!
接着编写用来接受 Message 的 broadcast 类 SmsReceiver.java
package com.elvis.android.blackcontacts; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.util.Log; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast; /** * Created by elvis on 10/22/15. */ public class SmsReceiver extends BroadcastReceiver { private final String TAG = "SmsReceiver"; private BlackInfoDBHelper dbhelper; private SharedPreferences sp; private DevicePolicyManager devicePolicyManager; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "Message Received!!!"); dbhelper = new BlackInfoDBHelper(context); final Bundle bundle = intent.getExtras(); try { devicePolicyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); Object[] pdus = (Object[]) intent.getExtras().get("pdus"); for(Object pdu:pdus) { SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdu); String phoneNumber = currentMessage.getDisplayOriginatingAddress(); String message = currentMessage.getDisplayMessageBody(); Log.i(TAG, phoneNumber + ":" + message); if (dbhelper.isBlackNumber(phoneNumber)) { Log.i(TAG, "Block!!!"); //abortBroadcast(); } else { for (int i = 0; i < 1000; i++) Toast.makeText(context, phoneNumber + ":" + message, Toast.LENGTH_LONG).show(); } } } catch (Exception e) { Log.e(TAG, "Exception smsReceiver" +e); } } }
并在AndroidManifest.xml 宣告权限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.elvis.android.blackcontacts" > <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY"/> <uses-permission android:name="android.permission.CALL_PHONE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter android:priority="1000"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.elvis.android.blackcontacts.CallReceiver"> <intent-filter android:priority="1000"> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver> <receiver android:name="com.elvis.android.blackcontacts.SmsReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="1"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> </application> </manifest>
以下为测试展示:
当用黑名单号码发短信时, 没有反应
当用另外一个号码发短信时, 会提示发送的号码及内容
Done!!
相关文章推荐
- [unity2D] 迷你拼图
- 如何在android平台上实现语音识别
- iOS中autolayout的简单使用
- swift学习笔记一
- 整理Android各种框架文档
- 移动端多行文本溢出省略
- IOS学习之NSUserDefaults的一些用法
- Android之PendingIntent的深入理解
- Android 属性动画(Property Animation) 完全解析 (下)
- Unity3D摄像机跟随物体移动的代码控制
- IOS键盘上的“Next”按钮事件,定位到下一个文本框
- android学习路线和环境搭建、推荐一个博客地址
- android touch事件分发
- Android IPC 机制【1】--简介
- Android 属性动画(Property Animation) 完全解析 (上)
- org.hibernate.TransientObjectException: The given object has a null identifier:
- Android~Fragment~碎片化知识点
- 详解Android中AsyncTask的使用
- 微信客户端.NET版
- Android判断Service是否运行