Android 利用广播实现指定号码的短信的拦截
根据最近的学习内容,今天实现了利用广播进行指定号码的拦截
步骤:
①、写一个数据库的帮助类,实现对数据库的创建,总共创建两个数据库psms(受保护的短信的数据库)和protectedPhone(受保护的联系人数据库),粘代码:
public class DBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "protectedSMS.db";
private static final int DB_VERSION = 2;
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql = "create table psms(_id integer primary key autoincrement,address varchar(20),type integer,state integer,body varchar(500),date varchar(20),person varchar(20))";
String sql1 = "create table protectedPhone(_id integer primary key autoincrement,person varchar(20),phone varchar(20))";
db.execSQL(sql);
db.execSQL(sql1);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
②、写一个类对数据库的增删改查进行封装,代码及注释如下:
/**
* 封装DAO,对数据库进制crud操作
*
* @author Administrator
*
*/
public class ProtectedDAO {
private SQLiteDatabase db;
public ProtectedDAO(Context context) {
DBHelper helper = new DBHelper(context);
db = helper.getWritableDatabase();
}
/**
* 插入数据到中
*
* @param table
* 表名
* @param values
* 对应的键和值
* @return 行号
*/
public long insert(String table, ContentValues values) {
// String sql = "insert into person(name,age) values('zhangsan',21)";
// db.execSQL(sql);
return db.insert(table, null, values);
}
/**
* 更新表中的数据
*
* @param table
* 表名
* @param values
* 修改后的值
* @param whereClause
* 条件语句可以使用占位符 ?
* @param whereArgs
* 使用该数组中的值替换占位符
* @return 受影响数据表的行数
*/
public int update(String table, ContentValues values, String whereClause,
String[] whereArgs) {
return db.update(table, values, whereClause, whereArgs);
}
/**
*
* 删除表中的数据
*
* @param table
* 表名
* @param whereClause
* 条件语句,可以使用占位符
* @param whereArgs
* 使用该数组中的值替换占位符
* @return 受影响数据的行数
*/
public int delete(String table, String whereClause, String[] whereArgs) {
return db.delete(table, whereClause, whereArgs);
}
/**
* 查询数据
*
* @param sql
* sql语句,查询语句,可以包含条件,sql语句不用使用分号结尾,系统自动添加
* @param selectionArgs
* sql的查询条件可以使用占位符,占位符可以使用selectionArgs的值替代
* @return Cursor 游标,可以比作结果集
*/
public Cursor select(String sql, String[] selectionArgs) {
return db.rawQuery(sql, selectionArgs);
}
/**
* 查询数据
*
* @param table
* 表名
* @param columns
* 查询的列(字段)
* @param selection
* where后的条件子句,可以使用占位符
* @param selectionArgs
* 替换占位符的值,
* @param groupBy
* 根据某个字段进行分组
* @param having
* 分组之后再进一步过滤
* @param orderBy
* 排序
* @return Cursor 游标,可以比作结果集
*/
public Cursor select(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy) {
// distinct: 消除重复数据项(去掉重复项)
// 1、table: 表名
// 2、columns: 查询的列(字段)
// 3、selection: where后的条件子句,可以使用占位符
// 4、selectionArgs: 替换占位符的值
// 5、groupBy: 根据某个字段进行分组
// 6、having: 分组之后再进一步过滤
// 7、orderBy: 排序
// limit: 进行分页查询
return db.query(table, c