[android] 手机卫士黑名单功能(短信拦截)
前面我们把需要拦截的手机号都存储和展示出来了,接下来是使用广播接收者拦截短信了,这个广播接收者需要和一个服务绑定,服务开启的时候,接收者存在,服务停掉时,接收者关闭
在service包下定义一个类CallSmsSafeService继承系统的Service
重写onCreate()方法
获取BroadcastReceiver对象,new出来
调用registerReceiver()方法,注册广播,参数:BroadcastReceiver对象,IntentFillter对象
重写onDestory()方法
调用unregisterReceiver()方法,参数:BroadcastReceiver对象
BroadcastReceiver对象置为null
定义一个内部类InnerSmsReceiver继承系统的BroadcastReceiver
重写 onReceive()方法,传递进来参数:Context对象,Intent对象
调用Intent对象的getExtras().get(“pdus”)方法,获取到Object[]数组
for循环Object[]数组,每个是Object对象
调用SmsMessage.createFromPdu()方法,获取到SmsMessage对象,参数:byte[]数组,强转Object对象
调用SmsMessage对象的getOriginatingAddress()方法,得到String发件人
调用Dao对象的查询数据库方法,查出这条短信的拦截模式
判断拦截模式,如果是全部拦截3或者短信拦截2,就调用abortBroadcast()方法
在设置中心对上面的服务进行配置,达到开启和关闭的功能
查看这篇:http://www.cnblogs.com/taoshihan/p/5468523.html
CallSmsSafeService.java
package com.qingguow.mobilesafe.service; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.telephony.SmsMessage; import com.qingguow.mobilesafe.db.ado.BlackNumberAdo; /** * 短息电话拦截服务 * @author taoshihan * */ public class CallSmsSafeService extends Service { private InnerSmsReceiver receiver; private BlackNumberAdo ado; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } /** * 服务创建 */ @Override public void onCreate() { receiver=new InnerSmsReceiver(); IntentFilter filter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); ado=new BlackNumberAdo(getApplicationContext()); registerReceiver(receiver, filter); super.onCreate(); } /** * 接收广播 * @author taoshihan * */ private class InnerSmsReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Object[] objs=(Object[]) intent.getExtras().get("pdus"); for(Object obj:objs){ SmsMessage sms=SmsMessage.createFromPdu((byte[]) obj); String sender=sms.getOriginatingAddress(); String mode=ado.find(sender); if(mode!=null){ if (mode.equals("2") || mode.equals("3")) { System.out.println("拦截短信:" + sender); abortBroadcast(); } } } } } @Override public void onDestroy() { unregisterReceiver(receiver); receiver=null; super.onDestroy(); } }
ado类
package com.qingguow.mobilesafe.db.ado; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.qingguow.mobilesafe.db.BlackNumberDBOpenHelper; public class BlackNumberAdo { private BlackNumberDBOpenHelper helper; public BlackNumberAdo(Context context) { helper = new BlackNumberDBOpenHelper(context); } /** * 插入数据 * * @param phone * @param mode */ public void add(String phone, String mode) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("phone", phone); values.put("mode", mode); db.insert("blacknumber", null, values); db.close(); } /** * 查询全部 * * @return */ public List<Map<String, String>> findAll() { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery( "select phone,mode from blacknumber order by id desc", null); List<Map<String, String>> list = new ArrayList<Map<String, String>>(); while (cursor.moveToNext()) { Map<String, String> info = new HashMap<String, String>(); String phone = cursor.getString(0); String mode = cursor.getString(1); info.put("phone", phone); info.put("mode", mode); list.add(info); } cursor.close(); db.close(); return list; } /** * 修改数据 * * @param phone * @param mode */ public void update(String phone, String mode) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("phone", phone); values.put("mode", mode); db.update("blacknumber", values, "phone=?", new String[] { phone }); db.close(); } /** * 删除数据 * * @param phone */ public void delete(String phone) { SQLiteDatabase db = helper.getWritableDatabase(); db.delete("blacknumber", "phone=?", new String[] { phone }); db.close(); } /** * 查找单条 * * @param phone */ public String find(String phone) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery( "select mode from blacknumber where phone=?", new String[] { phone }); if (cursor.moveToNext()) { String mode = cursor.getString(0); return mode; } return null; } }
相关文章
- Android破解学习之路(十六)—— dll破解的IL指令
- Android Material Design控件使用(2)——FloatButton TextInputEditText TextInputLayout 按钮和输入框
- Android RecyclerView预览item
- Android Material Design控件使用(一)——ConstraintLayout 约束布局
- Android Studio Error:Execution failed for task ':app:preDebugAndroidTestBuild'.彻底解决的方法以及修改AScompileSDKVersion
- Android破解——支付宝内购破解方法总结
- Android破解学习之路(十五)—— 【Unity3D】洛菲斯的呼唤(Lophis roguelike)无限金币(道具)的实现 破解
- Android破解学习之路(十四)——【Unity3D】王牌大作战破解
- Android开发过程中的坑及解决方法收录(四)
- Android破解学习之路(十三)—— 另类的破解VIP思路
- Android破解学习之路(十二)—— GP录像汉化过程及添加布局
- Android破解学习之路(十一)—— 关于去更新
- Android破解学习之路(十)—— 我们恋爱吧 三色绘恋 二次破解
- 基于微博LBS API开发的周边美图android app
- 解锁线上教育服务最佳方式——小程序化!
- Jenkins Android APP 持续集成体系建设二—自动部署、执行测试任务,关联打包任务
- Jenkins Android APP 持续集成体系建设一—源码编译、打包、输出APK包、邮件通知
- 性能调优之iostat命令详解
- 移动端自动化测试-Mac-IOS-Appium环境搭建
- 移动端自动化测试-Windows-Android-Appium环境搭建