安卓基础DAY10 笔记

day10
1_今日介绍
2_计算机表示图形的几种方式
3_缩放加载大图片的原理
4_缩放加载大图片完成
5_创建原图的拷贝Canvas 重要
6_图形处理的api
7_画画板小案例完成
8_撕衣服小案例
9_百度音乐盒完成SeekBar重要
10_播放视频多媒体声明周期 SurfaceView(重量级控件)重要
11_videoView控件介绍
12_vitamio框架介绍类库(掌握)重要
13_今日介绍照相和录像重要

1 为什么需要内容提供者
  [1]在Android下如何创建一个数据库? 定义一个类继承SqliteOpenHelper
  [2]sqlite3 命令行工具 打开一个数据库  
  [3]chcp 936把当前dos窗体编码方式变成gbk  如果变成utf-8  写chcp 65001
   [4]必须拿到哪个类 才能操作数据库 slitedatabase
  [5]chmod  可以改变文件权限  chmod 777 Account.db
   [6]内容提供者可以把私有的数据库内容暴露出来

2 内容提供者原理

  
3 实现内容提供者步骤
  [1]定义内容提供者 定义一个类继承contentProvider
  [2]在清单文件里面配置一下  学霸 定义一些规则 a呀 d
    [3] 定义一个urimatcher 
  [4]写一个静态代码块 添加匹配规则 
  [5]按照我们添加的匹配规则 暴露想暴露的方法 
  [6]如果你发现如下log日志 就说明内容提供者写的没有问题
  
  
  1. 09-11 02:02:31.142: I/ActivityThread(16636): Pub com.itheima.provider: com.itheima.db.AccountProvider
  [7]只要是通过内容提供者暴露出来的数据 其他应用访问的方式都是一样的 就是通过内容解析者 


4 备份短信案例
  ** 由于短信的数据库已经通过内容提供者暴露出来 所以我们直接通过内容的解析者去查询数据库
  
  
  1. try {
  2. //[1]获取XmlSerializer的实例
  3. XmlSerializer serializer = Xml.newSerializer();
  4. //[2]设置序列化器参数
  5. File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
  6. FileOutputStream fos = new FileOutputStream(file);
  7. serializer.setOutput(fos, "utf-8");
  8. //[3]写xml文档开头
  9. serializer.startDocument("utf-8", true);
  10. //[4]写xml的根节点
  11. serializer.startTag(null, "smss");
  12. //[5]构造uri
  13. Uri uri = Uri.parse("content://sms/");
  14. //[6]由于短信的数据库已经通过内容提供者暴露出来 所以我们直接通过内容解析者查询
  15. Cursor cursor = getContentResolver().query(uri, new String[]{"address","date","body"}, null, null, null);
  16. while(cursor.moveToNext()){
  17. String address = cursor.getString(0);
  18. String date = cursor.getString(1);
  19. String body = cursor.getString(2);
  20. //[7]写sms节点
  21. serializer.startTag(null, "sms");
  22. //[8]写address节点
  23. serializer.startTag(null, "address");
  24. serializer.text(address);
  25. serializer.endTag(null, "address");
  26. //[9]写date节点
  27. serializer.startTag(null, "date");
  28. serializer.text(date);
  29. serializer.endTag(null, "date");
  30. //[10]写body节点
  31. serializer.startTag(null, "body");
  32. serializer.text(body);
  33. serializer.endTag(null, "body");
  34. serializer.endTag(null, "sms");
  35. }
  36. serializer.endTag(null, "smss");
  37. serializer.endDocument();
  38. fos.close();
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. }

  关键一点   Uri uri = Uri . parse ( "content://sms/" );sms一定的知道是怎么来的 是通过查看系统短信的源码 smsProvider 得知

5 利用内容提供者插入短信
  

6 读取联系人案例
  QQ 微信 陌陌等 
  [1]data表  data1列里面存的是所有联系人的信息  raw_contact_id 列是用来区分一共有几条联系人信息 mimetype_id 列是用来区分数据类型 
  [2]row_contacts表 中contact_id就是data表的  raw_contact_id  
  
   查询联系人的步骤 
   [1]先查询row_contacts表 的contact_id列 我们就知道一共有几条联系人 
   [2]我根据 contact_id去查询data表  查询data1列和mimetype
   [3]view_data 是由data表和mimetype表的组合 
   
  


7 插入联系人
  插入联系人的步骤
  [1]先往 row_contacts表插入数据    contact_id 
  [2]在往data表里面插入数据  data1
 
  
  
  1. //点击按钮 插入一条联系人信息
  2. public void click(View v) {
  3. Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
  4. Uri dataUri = Uri.parse("content://com.android.contacts/data");
  5. //[2]获取name phone email Textutils
  6. String name = et_name.getText().toString().trim();
  7. String phone = et_phone.getText().toString().trim();
  8. String email = et_email.getText().toString().trim();
  9. //[2.1]在插入联系人id的时候 先查询一下 row_contact 一共有几条数据 加+1就是联系人的id
  10. Cursor cursor = getContentResolver().query(uri, null, null, null, null);
  11. int count = cursor.getCount();
  12. int contact_id = count +1;
  13. //[3] 先往row_contact表 插入联系人的id (contact_id)
  14. ContentValues values = new ContentValues();
  15. values.put("contact_id", contact_id);
  16. getContentResolver().insert(uri,values);
  17. //[4]在把name phone email 插入到data表
  18. ContentValues nameValues = new ContentValues();
  19. nameValues.put("data1", name);
  20. //☆ ☆ ☆ ☆ ☆ 插入的数据要告诉数据库 属于第几条联系人 和 数据类型
  21. nameValues.put("raw_contact_id", contact_id);
  22. nameValues.put("mimetype", "vnd.android.cursor.item/name");
  23. getContentResolver().insert(dataUri, nameValues);
  24. //[5]把phone号码 插入到data表
  25. ContentValues phoneValues = new ContentValues();
  26. phoneValues.put("data1", phone);
  27. phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");
  28. phoneValues.put("raw_contact_id", contact_id);
  29. getContentResolver().insert(dataUri, phoneValues);
  30. //[5]把phone号码 插入到data表
  31. ContentValues emailValues = new ContentValues();
  32. emailValues.put("data1", email);
  33. emailValues.put("mimetype", "vnd.android.cursor.item/email_v2");
  34. emailValues.put("raw_contact_id", contact_id);
  35. getContentResolver().insert(dataUri, emailValues);
  36. }

8 内容观察者
 (1)内容观察不是四大组件  他不需要在清单文件里配置
 (2)定义内容观察者

9内容观察者应用场景
 短信监听器 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值