Android基础组件-ContentProvider(二)
来源:互联网 发布:搜索排名优化策划 编辑:程序博客网 时间:2024/05/21 13:55
ContentProvider作为内容提供者,不仅仅只能用于不同程序之间的数据共享,还能用于获取获取系统的数据,也就是系统就相当于一个ContentProvider,然后我们只需要用ContentResolver通过指定的uri去获取系统所提供的数据就可以了。
一般有获取联系人、图库、短信等。
首先联系人的获取有两种:
1.直接通过数据库获取所有的联系人
ContentResolver resolver=getContentResolver(); //获取手机系统内存放联系人的表(raw_contacts)的Uri地址 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); //查询所有的联系人数据 Cursor cursor = resolver.query(uri, null, null, null, null); while (cursor.moveToNext()) { //联系人ID int id = cursor.getInt(cursor.getColumnIndex("_id")); //联系人姓名 String name=cursor.getString(cursor.getColumnIndex("display_name")); //联系人的手机号与姓名不在同一张表所以,所以要根据联系人的id再得到data表中对应的数据 Uri Datauri=Uri.parse("content://com.android.contacts/raw_contacts/" + id + "/data"); Cursor Datacursor = resolver.query(Datauri, null, null, null, null); while (Datacursor.moveToNext()) { //获得联系人主要存储的数据(手机号/邮箱/....) String data1 = Datacursor.getString(Datacursor.getColumnIndex("data1")); //获得data1代表的数据类型 String mimetype = Datacursor.getString(Datacursor.getColumnIndex("mimetype")); //vnd.android.cursor.item/phone_v2代表的则是手机号 if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) { Log.i("test","ID:"id+" 姓名:"+name+" 手机号:"+data1 ); } }
2.直接跳转至手机的联系人界面选择联系人
//跳转到联系人列表 Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("vnd.android.cursor.dir/phone"); startActivityForResult(intent, 0x111);
//从其他界面跳回此界面时将执行这个方法@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 0x111://联系人返回值 //从返回的data中得到选定联系人的uri Uri uri = data.getData(); //获得选中的联系人的数据 Cursor cursor = getContentResolver().query(uri, null, null, null, null); while (cursor.moveToNext()) { //联系人ID int id = cursor.getInt(cursor.getColumnIndexOrThrow(Contacts.Phones._ID)); //联系人的姓名 String name=cursor.getString(cursor.getColumnIndexOrThrow(Contacts.Phones.NAME)); //联系人手机号码 String number=cursor.getString(cursor.getColumnIndexOrThrow(Contacts.Phones.NUMBER)); } break; } }
在图库中获取图片:
//跳转到系统图库 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, 0x112);
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 0x112: Uri uriimage = data.getData(); try { if (bmp != null) { bmp.recycle(); } //根据返回得uri读取得到选中的图片 bmp=BitmapFactory.decodeStream(getContentResolver().openInputStream(uriimage)); } catch (FileNotFoundException e) { e.printStackTrace(); } imageView.setImageBitmap(bmp); break; } }
获取手机中的图片
Uri uri = Uri.parse("content://sms/"); Cursor cursor = getContentResolver().query(uri, null, null, null, null); while (cursor.moveToNext()) { /** *"address"手机号 * "body"短信内容 */ int id = cursor.getInt(cursor.getColumnIndex("_id")); String address = cursor.getString(cursor.getColumnIndex("address")); String date = cursor.getString(cursor.getColumnIndex("date")); String type = cursor.getString(cursor.getColumnIndex("type")); String content = cursor.getString(cursor.getColumnIndex("body"));
最后短信分很多种,获取的uri也不一样,提供以下几种类型的uri:
“content://sms/”是获取所有短信,不区分类型
“content://sms/inbox”获取收件箱中的短信
“content://sms/sent”获取已发送的短信
“content://sms/draft”获取草稿箱中的短信
“content://sms/outbox”获取发件件箱中的短信
“content://sms/failed”获取发送失败的短信
“content://sms/queued”获取发送队列的短信
2 0
- Android基础组件-ContentProvider(二)
- Android基础组件-ContentProvider(一)
- Android 四大组件学习之ContentProvider二
- Android核心组件之ContentProvider(二)--创建自己的ContentProvider
- 7.Android基础:四大组件之----->ContentProvider
- android基础(ContentProvider)
- Android 面试题总结之Android 基础ContentProvider(二)
- Android的ContentProvider(二)
- 【Android】ContentProvider详解(二)
- 【Android基础】四、四大组件(二)
- Android四大组件之ContentProvider(二)读取设备上的图片、音频和视频
- Android之四大组件之一-ContentProvider内容提供者的使用(二)
- Android组件之ContentProvider(二)——共享单词本
- android组件ContentProvider学习心得(上)
- 【Android】四大组件(4)ContentProvider
- Android组件之ContentProvider(内容提供者)
- Android学习-四大组件(ContentProvider)
- Android四大组件之ContentProvider(上)
- iOS开发 - 封装一个自己的按钮
- 开发者都应该使用的10个C++11特性
- 面试如何利用最后五分钟反败为胜
- CKEditor 4 开发人员指南
- Hibernate 实体关联关系映射----总结
- Android基础组件-ContentProvider(二)
- PageRank算法
- 二分查找:Search for a Range
- CheckStyle的检查规则(共138条规则)
- poj 3140 Contestants Division DFS
- 在Java中使用协程(Coroutine)
- 11个EL隐式对象
- 22、C#:利用接口增加封装安全性
- 第二章:java_基本语法_3 运算符