[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] 手机卫士黑名单功能(短信拦截)的更多相关文章
- [android] 手机卫士黑名单功能(列表展示)
先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截 新建Activity类CallSmsSafeActivity.java 新建布局文件activity_ ...
- Android手机上监听短信的两种方式
Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...
- Android应用源码安卓短信拦截木马项目源码
温馨提示:本资源由源码天堂整理提供下载转载时请留下链接说明:http://code.662p.com/view/9174.html安卓短信拦截木马源码主要功能就是开机后台启动,拦截本机收到的短信并且转 ...
- android之短信拦截器
下面通过短信拦截器来介绍短信中的广播 布局文件 在布局文件中可以设置需要拦截的号码 <?xml version="1.0" encoding="utf-8" ...
- Android的BroadcastReceiver 广播 短信拦截
如何去理解BroadcastReceiver(广播)?其实可以这样想,首先我们要有一个发送广播的"媒体",在这个例子中,我们暂且用activity组件作为这个媒体,当然以后会用到s ...
- Android -- 怎么发出和接收广播, Broadcast, 电话拨号拦截,短信拦截
1. 发送广播 使用以下三个API可以发送广播 public void click(View view){ Intent intent = new Intent(); intent.setAction ...
- [android] 手机卫士黑名单功能(ListView结合SQLite增删改)
修改界面,在顶部横条上增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库 自定义对话框看这篇http://www.cnblogs.com/taoshihan/p/53703 ...
- 利用Android Lost通过互联网或短信远程控制安卓设备
利用Android Lost通过互联网或短信远程控制安卓设备 作者:Jack Wallen| 杰克·瓦伦翻译:PurpleEndurer.2014-11-15第1版 使用智能手机要考虑的一个至关重要的 ...
- [android] 手机卫士黑名单功能(ListView优化)
上一篇记录了使用ListView展示出来了100条数据,当慢慢拖动的时候,不会有问题,但是当拖动很快的时候,应用会报anr错误 查看错误日志,看到报OutOfMemoryError,内存不足 List ...
随机推荐
- 全球第一开源云ERP Odoo操作手册 模块安装和界面汉化指南
之前介绍了odoo的安装和初始设置以及数据库,下面来介绍odoo的模块安装和界面汉化. 1.4 模块安装和界面汉化 Odoo 的功能包含在不同的模块中, 刚创建的数据库除 Odoo 的核心模块外, 其 ...
- Day 35 验证客户端的合法性+socketserver
一 .getpeername和getsoketopt的用法 服务器端代码 import socket sk =socket.socket() sk.bind(('127.0.0.1',9000)) s ...
- Day 11 函数名,闭包,装饰器. +作业
'''一.函数名.def func(): print(5555)print(func)#输出结果 <function func at 0x026B5E88> 打印函数地址. # 1. 函数 ...
- 【JavaScript】 js立即执行函数
( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,一般理解是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函 ...
- SSH免密码远程登录Linux
1. 有A,B两台机(Linux/unix), 要想从A用ssh远程登录到B上(假设各自的IP,A:192.168.100:B:192.168.1.104). 2. 在A机上,用“ssh-keygen ...
- docker下 klee第一个测试
被测试的简单函数源文件位于 /klee_src/examples/get_sign 目录下 该源代码分为三个部分 第一个部分为被测试的函数 int get_sign(int x) { if (x = ...
- 【learning】微信跳一跳辅助c++详解 轻松上万 【下】
如果你还没有看完本blog的上篇,建议您先看完上篇!! 第一代辅助如何死的? 我们先来看四张图 如上方最左图所示,前面是一个小圆柱子,看起来很人畜无害似不似?? 由于上一步跳出了偏差,并没有 ...
- linux下mysql主从复制搭建
目标:搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,实现主从复制 环境: 主数据库: 192.168.1.1 从数据库: 192.168.1.2 mysql安装可参考:https:// ...
- CS231n学习笔记-图像分类笔记(上篇)
原文地址:智能单元 图像分类:所谓图像分类问题,就是已有固定的分类标签集合,然后对于输入的图像按照标签类别,将其打上标签. 下面先介绍一下一个简单的图像如何利用计算机进行分类: 例子:以下图为例,图像 ...
- artTemplate-优秀的前端模板引擎
artTemplate-优秀的前端模板引擎 1.html中引入artTemplate的js文件: <script type="text/javascript" src=&qu ...