经过长时间的学习,完成了这个APP的第二个功能,自己手动添加黑名单,防止一些骚扰电话和短信。

完成效果图:

这个功能大致就是者四张效果图。

设计思路:

  1. 首先在APP的这个应用的data文件下建立一个数据库,数据库中存放着一张表(表名随便取,但是要保持一致,有三个字段,id   phonenumber表示手机号 model表示拦截模式)
  2. 设计利用这个数据库的接口,利用增删改查来更新数据库
  3. 设计显示号码和拦截模式的界面
  4. 设置【添加】的后台逻辑
  5. 设置【删除】的后台逻辑
  6. 在广播中监听号码,执行相应的事件

第一步:建立数据库:

这个知识点还算是容易,就是基本的建库和写一些增删改查的操作。

建立一个数据库:

package com.example.yzg.safepeople.db;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;/*** Created by yzg on 2019/8/2.*/public class BlackNumberDBHelper extends SQLiteOpenHelper {public BlackNumberDBHelper(Context context) {super(context,"blacknumber.db",null,1);}/*** 创建一个数据库表* @param db* 包含三个字段  id  phonenumber  model* model 0 全部拦截   1 电话拦截  2 短信拦截*/@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table number1 (id Integer primary key AUTOINCREMENT,phonenumber varchar(20),model varchar(2) )");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

在构造方法中创建一个数据库,用的时候需要传入上下文参数

在onCreate方法中建立一张表,用来存放黑名单信息

注意点:

我在编写这一块代码的时候,自己在写id 的类型时,写的是int 结果一直报错,后来换成了Integer,这才成功了!

增删改查的操作没有和建库操作放在一起,而是单独在一个类中,我感觉这样写更加一目了然。

package com.example.yzg.safepeople.db.dao;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;import com.example.yzg.safepeople.bean.BlackNumberInfo;
import com.example.yzg.safepeople.db.BlackNumberDBHelper;import java.util.ArrayList;
import java.util.List;/*** Created by yzg on 2019/8/2.* 黑名单数据的增删改查*/public class BlackNumberDao {private BlackNumberDBHelper db;private String tablename = "number1";//写在构造器中   只要对象new 出来   数据库就会自动创建public BlackNumberDao(Context context) {db = new BlackNumberDBHelper(context);}public List<BlackNumberInfo> QueryAll(){List <BlackNumberInfo> list = new ArrayList();SQLiteDatabase readableDatabase = db.getReadableDatabase();Cursor query = readableDatabase.query(tablename, null, null, null, null, null, null);while (query.moveToNext()){BlackNumberInfo blackNumberInfo = new BlackNumberInfo();String phone = query.getString(1);blackNumberInfo.setPhonenumber(phone);String model = query.getString(2);blackNumberInfo.setModel(model);list.add(blackNumberInfo);}query.close();readableDatabase.close();return list;}/*** 往数据库中添加数据** @param phone 电话* @param model 拦截模式*/public Boolean Add(String phone, String model) {SQLiteDatabase writableDatabase = db.getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("phonenumber", phone);Log.d("测试", "Add: "+phone);contentValues.put("model", model);//如果insert的值位-1   则说明插入失败long insert = writableDatabase.insert(tablename, null, contentValues);writableDatabase.close();//如果插入进数据库 则返回trueif (insert != -1) {return true;} else {return false;}}/*** 删除数据库中的数据** @param phone* @return*/public Boolean Delete(String phone) {SQLiteDatabase writableDatabase = db.getWritableDatabase();//返回值为0 说明没有删除数据int delete = writableDatabase.delete(tablename, "phonenumber=?", new String[]{phone});writableDatabase.close();if (delete != 0) {return true;} else {return false;}}/*** 更改拦截模式** @param phone* @param model* @return*/public Boolean Update(String phone, String model) {SQLiteDatabase writableDatabase = db.getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("model", model);int update = writableDatabase.update(tablename, contentValues, "phonenumber=?",new String[]{phone});writableDatabase.close();if (update==0){return false;}else {return true;}}/*** 查找数据的操作  主要是查找phone的model* @param phone* @return*/public String Query(String phone){String model = null;SQLiteDatabase readableDatabase = db.getReadableDatabase();Cursor query = readableDatabase.query(tablename, new String[]{"model"}, "phonenumber=?", new String[]{phone}, null, null, null);while (query.moveToNext()){model = query.getString(0);}return model;}}

在构造方式中就会创建一个数据库的db,只要一创建BlackNumberDao这个类,就会获得数据库的访问,然后就可以对数据库表进行增删改查,只要记住相应的方式的使用即可!

注意点:利用方法的时候,参数的个数个位置一定要弄清楚,不要搞错;还有就是在查询的时候,一定要用对方法,比如我本来想用getString结果写成了getColumnName,结果找错找了半天,累死了!!!!

可以利用【SQLite Expert Personal 5 - 64bit】这个软件来查看从手机中导出的数据库文件,目的是查看自己创建的数据库是否正确,还有就是在没完成添加数据操作之前自己添加数据。

这些基本就把数据库部分给完成了,然后就是黑名单数据的展示。

第二步:展示数据

展示数据的界面简单,但是最难就是关于用LIstView来展示数据了,会用,但是不知道为什么,自己对于这一方面还是掌握不清。

这个图片就是代表下面的代码:(这是局部代码,有需要的可以留言)

class BlackAdapter extends BaseAdapter{@Overridepublic int getCount() {return blackNumberInfos.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {View view = null;ViewHolder viewHolder;if (convertView == null){viewHolder = new ViewHolder();view = View.inflate(getApplicationContext(),R.layout.item_balcknumber_view,null);viewHolder.tv_phone = view.findViewById(R.id.tv_phone);viewHolder.tv_model = view.findViewById(R.id.tv_model);viewHolder.iv_delete = view.findViewById(R.id.iv_delete);view.setTag(viewHolder);}else {view = convertView;viewHolder = (ViewHolder) view.getTag();}viewHolder.iv_delete.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final AlertDialog.Builder builder = new AlertDialog.Builder(BlackActivity.this);builder.setTitle("删除");builder.setMessage("你确认删除吗?");builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {show1.dismiss();}});builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {BlackNumberDao blackNumberDao = new BlackNumberDao(getApplicationContext());Log.d("测试", "onClick: 删除吗"+blackNumberInfos.get(position).getPhonenumber());Boolean delete = blackNumberDao.Delete(blackNumberInfos.get(position).getPhonenumber());if (delete){blackNumberInfos.remove(position);blackAdapter.notifyDataSetChanged();show1.dismiss();}else {Toast.makeText(BlackActivity.this,"删除不成功!!!",Toast.LENGTH_SHORT).show();}}});show1 = builder.show();}});BlackNumberInfo blackNumberInfo = blackNumberInfos.get(position);viewHolder.tv_phone.setText(blackNumberInfo.getPhonenumber());String model = blackNumberInfo.getModel();switch (Integer.parseInt(model)){case 0:viewHolder.tv_model.setText("全部拦截");break;case 1:viewHolder.tv_model.setText("电话拦截");break;case 2:viewHolder.tv_model.setText("短信拦截");break;}return view;}class ViewHolder{TextView tv_phone;TextView tv_model;ImageView iv_delete;}}

在这个环节中,自己还是不太熟悉,需要仔细琢磨的地方很多,还得多想想为甚什么,多敲一敲代码。

第三步就是,增加和删除的逻辑

刚才删除的局部代码在第二步的代码中,添加的代码还是比较简单的。

private void initEvent() {//添加黑名单按钮的逻辑代码bt_black_add.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {AlertDialog.Builder builder = new AlertDialog.Builder(BlackActivity.this);View view = View.inflate(getApplicationContext(), R.layout.item_black_add, null);final EditText black_phone = view.findViewById(R.id.black_phone);Button btn_cancle = view.findViewById(R.id.btn_cancle);Button btn_confirm = view.findViewById(R.id.btn_confirm);final RadioGroup rg = view.findViewById(R.id.rg);builder.setView(view);final AlertDialog show = builder.show();btn_cancle.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {show.dismiss();}});btn_confirm.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String phone = black_phone.getText().toString();if(TextUtils.isEmpty(phone)){Toast.makeText(BlackActivity.this,"号码不能为空!!!",Toast.LENGTH_SHORT).show();}else {int checkedRadioButtonId = rg.getCheckedRadioButtonId();String model = null;switch (checkedRadioButtonId){case R.id.rb_all:model = "0";break;case R.id.rb_phone:model = "1";break;case R.id.rb_sms:model = "2";break;}BlackNumberDao blackNumberDao = new BlackNumberDao(getApplicationContext());Boolean add = blackNumberDao.Add(phone, model);if (add){BlackNumberInfo blackNumberInfo = new BlackNumberInfo();blackNumberInfo.setPhonenumber(phone);blackNumberInfo.setModel(model);blackNumberInfos.add(0,blackNumberInfo);blackAdapter.notifyDataSetChanged();show.dismiss();}else {Toast.makeText(BlackActivity.this,"添加不成功!",Toast.LENGTH_SHORT).show();}}}});}});}

点击添加之后,弹出一个自定义的对话框,在里面输入相应的内容,然后进行相应的判断。

注意点:在添加相应的数据之后,要对相应的列表进行增加,还得对相应的Adapter进行更新操作。

最后一步就是在广播中监听,具体的代码在我的《手机安全卫士(六)》中,有兴趣的可以看一看!!

手机安全卫士(七)----- 添加黑名单(防骚扰)相关推荐

  1. 华为手机如何批量添加黑名单

    通过以下方法,可以屏蔽某个城市的区号或者手机号码前缀.对于某个省份想屏蔽也同样可以做到. 1.点击[拨号] 2.点击右下角的三个点,并选[骚扰拦截] 3.点击右上角的齿轮,并选[号码黑名单] 4.点击 ...

  2. Android项目实战_手机安全卫士拦截骚扰

    ###1.骚扰拦截需求分析 1.界面 1.1 黑名单列表界面 1.2 添加黑名单界面 2.功能 2.1 黑名单的添加.删除 2.2 拦截电话 2.3 拦截短信 ###2.黑名单数据库的创建 1.分析需 ...

  3. 基于 Android 平台的手机安全卫士的设计与实现【100010420】

    基于 Android 平台的手机安全卫士的设计与实现 第 1 章 引言 1.1 研究背景及意义 随着智能手机和网络的完美结合,使得智能机的功能越来越强大,浏览网页.网络购物.视频对话都普及到各个手机终 ...

  4. Android毕业设计——基于Android+Eclipse的手机安全卫士设计与实现(毕业论文+程序源码)——手机安全卫士

    基于Android+Eclipse的手机安全卫士设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+Eclipse的手机安全卫士设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  5. 基于Android的手机安全卫士的开发

    基于Android的手机安全卫士的开发 开发环境 处理器:Intel® Core™ i5-5200U CPU 2.20GHz 内存:4GB 硬盘:500GB 操作系统:Windows 7中文版,64位 ...

  6. 基于android平台的手机安全卫士的设计与实现 开题报告,开题报告-基于android的手机安全卫士的设计与开发.doc...

    毕业设计开题报告 题 目: 基于Android的手机安全卫士的设计与开发 专 业 计算机科学与技术 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 电气信息工程学院 专 业 负 责 人 ...

  7. Android项目:手机安全卫士(13)—— 通讯卫士之电话拦截与挂断

    Android项目:手机安全卫士(13)-- 通讯卫士之电话拦截与挂断 1 介绍 上一节我们讲了黑名单数据的存储等 CRUD 操作,今天,就到了它们发挥作用的时候了,通讯卫士功法终于要练成了.我们实现 ...

  8. 学习笔记之《Android项目实战——手机安全卫士》

    [Android项目实战-手机安全卫士] 目标:快速积累开发经验,具备中级Android工程师能力. 如遇到难以理解的逻辑或功能,可以先将程序打断点观察程序的执行逻辑. 第一章项目简介:欢迎界面.主界 ...

  9. 界址点圆圈怎么生成_手机联系人怎么加入黑名单

    手机设置黑名单功能有助于我们阻止骚扰电话和短信等的侵袭,不同的手机系统有不同的设置手机黑名单方法,安卓手机就以三星为例,给大家分别介绍一下安卓手机和苹果手机的手机联系人怎么加入黑名单. 手机联系人怎么 ...

最新文章

  1. 啊D扫肉鸡+无远控双开XP3389 termsrvhack.dll_本地测试
  2. Git 面对不同的场景的命令使用
  3. 如何将mysql卸载干净
  4. LeetCode-剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  5. AIgorand的相关学习参考链接
  6. nowcoderD Xieldy And His Password
  7. 5s突然一直信号无服务器,手机突然没信号了怎么回事?
  8. 记录TCP协议使用Socket连接,客户端请求服务器read()阻塞问题
  9. linux 启动ftp服务,sftp服务
  10. php7 一句话木马,PHP一句话木马研究
  11. gitblit如何迁移入gitlab合并迁移_gitlab和gitlab项目迁移
  12. matlab 卷积神经网络 图像去噪 对抗样本修复
  13. 关于layuiAdmin 后台管理模板购买授权的问题
  14. 手把手教你快速掌握 ABD调试工具+19条常用命令
  15. 接口测试工具--Postman安装
  16. 京东到家库存系统架构设计
  17. 一个简单todos的例子
  18. 微信开放平台的使用介绍,配置流程
  19. python easyOCR爬取微信的运动步数排名
  20. MOSES系统训练中间过程和意义详解

热门文章

  1. 文件夹病毒专杀简单实现
  2. 羽毛球为什么要用旋转手腕杀球
  3. 揭秘:保养品包装有玄机 玻璃材质最安全
  4. idea同时修改相同单词
  5. 大学生应该脱口而出的
  6. element ui table 中加下拉菜单
  7. Linux下SSH代理
  8. Linux下rsync设置+inotify设置文件同步
  9. Mysql设置自增长主键的初始值
  10. 金太阳教育美股上市:市值3.6亿美元 成小盘中概股