先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截

新建Activity类CallSmsSafeActivity.java

新建布局文件activity_call_sms_safe.xml

列表展示所有的黑名单手机号码

在布局文件中添加<ListView>控件,定义一个id

获取ListView对象

调用ListView对象的setAdapter()方法,参数:ListAdapter对象

定义内部类CallSmsSafeAdapter继承系统的BaseAdapter

实现四个方法,重要的有两个getCount()和getView()

实现getCount()方法,返回集合的长度

实现getView()方法

调用View.inflate()方法,转换布局文件为View对象,参数:上下文,布局资源,null

查找到相应的控件,设置文件

数据库操作

在db包下新建一个BlackNumberDBOpenHelper类继承SQLiteOpenHelper类

实现构造方法

调用父类的构造方法,super(),参数:上下文,数据库名称,游标工厂(null),版本号(1)

重写onCreate()方法,传递进来参数SQLiteDatabase对象

调用SQLiteDatabase对象的execSQL()方法,参数:String的sql语句(例如:create table blacknumber (id integer primary key autoincrement,phone varchar(20) ,mode varchar(2)) )

重写onUpgrade()方法

dao类

在db.dao包下新建一个BlackNumberDao类

定义构造方法,传递进来参数:Context对象

获取BlackNumberDBOpenHelper对象,参数:Context对象

查询单条

定义方法find(),查询一条记录,参数:String类型电话号码

调用helper对象的getReadableDatabase()方法,获取到SQLiteDatabase对象

调用SQLiteDatabase对象的rawQuery()方法,获取到Cursor对象,参数:String类型SQL语句,String[]参数值数组

调用Cursor对象的moveToNext()方法,如果为真,说明有数据,

调用Cursor对象的getString()方法,获取到值,参数:字段索引

返回Map集合

查询全部

定义方法findAll(),查询全部数据

调用helper对象的getReadableDatabase()方法,获取到SQLiteDatabase对象

调用SQLiteDatabase对象的rawQuery()方法,获取到Cursor对象,参数:String类型SQL语句

新建一个domain包,新建一个业务bean,BlackNumberInfo类

while循环Cursor对象调用moveToNext()

返回List集合

插入一条

定义方法add(),插入一条记录,参数:String电话号码,String的mode模式

调用helper对象的getWritableDatabase()方法,获取到SQLiteDatabase对象

调用SQLiteDatabase对象的insert()方法,插入一条记录,参数:String表名,允许为null的列,ContentValues对象

获取ContentValues对象,new出来

调用ContentValues对象的put()方法,参数:key,value

修改记录

定义方法update(),修改记录,参数:String电话号码,String的mode模式

调用helper对象的getWritableDatabase()方法,获取到SQLiteDatabase对象

调用SQLiteDatabase对象的update()方法,修改表记录,参数:String表名,ContentValues对象,String的条件(“number=?”),String[]参数值数组

删除记录

定义delete()方法,删除记录,参数:String电话号码

调用helper对象的getWritableDatabase()方法,获取到SQLiteDatabase对象

调用SQLiteDatabase对象的delete()方法,删除表记录,参数:String表名,String的条件(“number=?”),String[]参数值数组

调用SQLiteDatabase对象的close()方法,关闭数据库

CallSmsSafeActivity.java

package com.qingguow.mobilesafe;

import java.util.List;
import java.util.Map; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView; import com.qingguow.mobilesafe.db.ado.BlackNumberAdo; /**
* 通讯卫士
*
* @author taoshihan
*
*/
public class CallSmsSafeActivity extends Activity {
private ListView listview;
private List<Map<String, String>> infos; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_call_sms_safe);
listview = (ListView) findViewById(R.id.lv_blacknumber); BlackNumberAdo ado = new BlackNumberAdo(this);
infos = ado.findAll();
listview.setAdapter(new MyAdapter());
// //添加100条测试数据
// Random random=new Random();
// for(int i=1;i<=100;i++){
// ado.add("18805419000"+i, String.valueOf(random.nextInt(3)+1));
// } } private class MyAdapter extends BaseAdapter { @Override
public int getCount() {
// TODO Auto-generated method stub
return infos.size();
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(CallSmsSafeActivity.this,
R.layout.list_call_sms_safe_item, null);
TextView phoneView = (TextView) view
.findViewById(R.id.tv_main_phone);
TextView modeView = (TextView) view
.findViewById(R.id.tv_block_mode);
phoneView.setText(infos.get(position).get("phone"));
switch (infos.get(position).get("mode")) {
case "1":
modeView.setText("电话拦截");
break;
case "2":
modeView.setText("短信拦截");
break;
case "3":
modeView.setText("全部拦截");
break;
default:
break;
} return view;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} }
}

BlackNumberAdo.java

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", 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();
}
}

BlackNumberDBOpenHelper.java

package com.qingguow.mobilesafe.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper; /**
* 黑名单数据库帮助类
*
* @author taoshihan
*
*/
public class BlackNumberDBOpenHelper extends SQLiteOpenHelper { public BlackNumberDBOpenHelper(Context context) {
super(context, "blacknumber", null, 1);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table blacknumber (id integer primary key autoincrement,phone varchar(20),mode varchar(2))");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

[android] 手机卫士黑名单功能(列表展示)的更多相关文章

  1. [android] 手机卫士黑名单功能(短信拦截)

    前面我们把需要拦截的手机号都存储和展示出来了,接下来是使用广播接收者拦截短信了,这个广播接收者需要和一个服务绑定,服务开启的时候,接收者存在,服务停掉时,接收者关闭 在service包下定义一个类Ca ...

  2. Android 手机卫士--设置界面&功能列表界面跳转逻辑处理

    在<Android 手机卫士--md5加密过程>中已经实现了加密类,这里接着实现手机防盗功能 本文地址:http://www.cnblogs.com/wuyudong/p/5941959. ...

  3. Android 手机卫士--参照文档编写选择器

    本文来实现<Android 手机卫士--导航界面1的布局编写>中的图片选择器部分的代码. 本文地址:http://www.cnblogs.com/wuyudong/p/5944356.ht ...

  4. Android 手机卫士--确认密码对话框编写

    本文接着实现“确认密码”功能,也即是用户以前设置过密码,现在只需要输入确认密码 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,转载请注明出处. ...

  5. Android 手机卫士--签名文件说明&包名说明

    在<Android 手机卫士--打包生成apk维护到服务器>一文中,实现了新版本的apk到服务器,当打开客户端apk的时候,发现有新版本,提示更新.还实现了利用xutils工具实现了从服务 ...

  6. Android 手机卫士--弹出对话框

    在<Android 手机卫士--解析json与消息机制发送不同类型消息>一文中,消息机制发送不同类型的信息还没有完全实现,在出现异常的时候,应该弹出吐司提示异常,代码如下: private ...

  7. android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码

    Android精选源码 android身份证.银行卡号扫描源码 android仿bilibili客户端 android一款3D 指南针 源码 android手机卫士app源码 android提醒应用, ...

  8. Android 手机卫士--阶段小结1

    本文地址:http://www.cnblogs.com/wuyudong/p/5904528.html,转载请注明源地址. 本文对之前手机卫士开发进行一个小结. 1.SplashActivity 版本 ...

  9. Android 手机卫士--安装过程中点击回退按钮

    本文地址:http://www.cnblogs.com/wuyudong/p/5903707.html,转载请注明源地址. 在手机卫士之前的版本升级的对话框中: 有的用户暂时不想更新,没有点击“稍后再 ...

随机推荐

  1. django url 路由设置技巧

    Django的url使用方法 利用Django开发站点.能够设计出很优美的url规则,假设url的匹配规则(包括正則表達式)组织得比較好,view的结构就会比較清晰.比較easy维护. 最简单的形式 ...

  2. thinkphp5的mkdir() Permission denied问题

    最近一直在用tp5写项目,在此遇到的问题也比较多.今天来谈谈“mkdir() Permission denied”错误. 你如果不仅仅写代码,还得部署到线上,那么这个tp5的这个错误,你有很大概率会遇 ...

  3. Spring+Ehcache

    这里记录一下Spring+Ehcache的结合使用 1.添加依赖 <dependency> <groupId>org.springframework</groupId&g ...

  4. 一次对webshell的后门的查看

    本文作者i春秋作家——非主流 昨天晚上突发奇想的想去看看github上面tennc的webshell收集项目中的shell有没有漏洞,比如未授权啊啥的,结果找半天都没找到...但是机缘巧合下,居然给我 ...

  5. flask-mysqldb安装时EnvironmentError: mysql_config not found

    安装时候的日志如下: sh: : mysql_config: not found Traceback (most recent call last): File , in <module> ...

  6. jvm高级特性(5)(1)(原子性,可见性,有序性,volatile,概述)

    JVM高级特性与实践(十二):高效并发时的内外存交互.三大特征(原子.可见.有序性) 与 volatile型变量特殊规则 简介: 阿姆达尔定律(Amdahl):该定律通过系统中并行化与串行化的比重来描 ...

  7. eclipse上搭建Spring环境

    搭建环境之前要下载Spring Tool Suite和Spring framework 1.Spring IDE 下载(也叫Spring Tool Suite 简称 STS),进官网,直接给链接htt ...

  8. angular.js的依赖注入解析

    本教程使用AngularJS版本:1.5.3        angularjs GitHub: https://github.com/angular/angular.js/        Angula ...

  9. leetcode-917-仅仅反转字母

    题目描述: 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转. 示例 1: 输入:"ab-cd" 输出:"dc-b ...

  10. 【codeforces 24D】损坏的机器人

    题目大意:有一只坏了的机器人站在一个n∗m的网格里,初始位置在(x,y).现在每个单位时间内它会随机选左右下三个方向走,如果它随机的方向会走出网格就不会往这个方向走.当然这个机器人也可能原地停留一个单 ...