1,黑名单数据库创建
三个字段(_id 自增长字段
phone 黑名单号码 mode 拦截类型)
创建表的sql语句
create table blacknumber (_id integer primary key autoincrement , phone varchar(20), mode varchar(5));
结合项目,去创建数据库,以及相应的表
2,crud增删改查
android上junit测试,配置instrumentation,uses-library
3,数据适配器的模板代码
listView优化
1:复用convertView
2:复用ViewHolder让其减少findViewById()次数
3:static ViewHolder
4:分页算法
ViewHolder viewHolder = null;
if(convertView == null){
viewHolder = new ViewHolder();
convertView = View.inflate();
viewHolder.text1 = convertView.findViewById(R.id.text1);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.text1.setText("文本内容");
static class ViewHolder{
TextView text1;
}
4,数据库分页查询,逆序排列
按照_id逆序,查询后20条数据(limit 中第一位代表逆序的索引值,第二位代表查询的条目个数)
select * from blacknumber order by _id desc limit ?,20;
5,加载更多的触发条件
1.监听状态改变
2.滚动到最底部,最后一个listView的条目可见
3.滚动状态发生改变 滚动------>停止(空闲)
加载下一页数据完成后,需要添加到上一页数据的最后面
20 40 60 80 100
6,listView列表添加数据的过程
1.向数据库中插入一条数据
2.向结合中添加一条数据(最顶端)
3.通知数据适配器刷新
7,listView列表移除数据的过程
1.从数据库中删除一条数据
2.从结合中删除一条数据
3.通知数据适配器刷新
8,
拦截短信
短信在接受的时候,广播发送,监听广播接受者,拦截短信(有序)
将广播的优先级级别提高到最高 (1000)
拦截电话
有电话拨入,处于响铃状态,响铃状态通过代码去挂断电话(aidl,反射),拦截电话
挂断电话号码的方法,放置在了aidl文件中名称为endCall
在此处去查看TelePhoneManager源码,去查找获取ITelephony对象的方法
ServiceManager此类android对开发者隐藏,所以不能去直接调用其方法,所以需要反射调用
获取iaidl所在的文件对象
ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
<uses-permission android:name="android.permission.CALL_PHONE"/>
//1,获取ServiceManager字节码文件
Class<?> clazz = Class.forName("android.os.ServiceManager");
//2,获取方法
Method method = clazz.getMethod("getService", String.class);
//3,反射调用此方法
IBinder iBinder = (IBinder) method.invoke(null, Context.TELEPHONY_SERVICE);
//4,调用获取aidl文件对象方法
ITelephony iTelephony = ITelephony.Stub.asInterface(iBinder);
//5,调用在aidl中隐藏的endCall方法
iTelephony.endCall();
7,通话记录