[android] 手机卫士黑名单功能(列表展示)

2024-03-17 21:32

本文主要是介绍[android] 手机卫士黑名单功能(列表展示),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

 

新建ActivityCallSmsSafeActivity.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()方法,参数:Stringsql语句(例如: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包,新建一个业务beanBlackNumberInfo

while循环Cursor对象调用moveToNext()

返回List集合

 

插入一条

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

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

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

获取ContentValues对象,new出来

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

 

修改记录

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

调用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;@Overrideprotected 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 {@Overridepublic int getCount() {// TODO Auto-generated method stubreturn infos.size();}@Overridepublic 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;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 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);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table blacknumber (id integer primary key autoincrement,phone varchar(20),mode varchar(2))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}

 

 

这篇关于[android] 手机卫士黑名单功能(列表展示)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820235

相关文章

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk