上一篇,我们讲到ContentProvider的主要功能是,提供共享数据给其他应用使用。在Android系统内部,同样提供了共享数据,查看 android.provider 包下,发现有以下的共享数据

本地多媒体(图片、音视频等)

通讯录联系人

通话记录

短信记录

...

当然,这些数据必须通过用户授权后才可以调用,所以在调用前请申请对应的权限(6.0系统以上)

requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1000);

获取数据

getContentResolver()的查询方法

query(@RequiresPermission.Read @NonNull Uri uri,

@Nullable String[] projection, @Nullable String selection,

@Nullable String[] selectionArgs, @Nullable String sortOrder)

其中参数的含义

uri 目标的uri路径

图片为 MediaStore.Images.Media.EXTERNAL_CONTENT_URI (外部)以及 MediaStore.Images.Media.INTERNAL_CONTENT_URI (内部)

视频为 MediaStore.Video.Media.EXTERNAL_CONTENT_URI

音频为 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI

通讯录 ContactsContract.Contacts.CONTENT_URI

通话记录 CallLog.Calls.CONTENT_URI

短信记录 Telephony.Sms.CONTENT_URI

projection 查询结果需要哪一些属性,null的时候返回所有

selection 查询条件

selectionArgs 对应查询条件的参数

sortOrder 排列条件

以图片为例子

如果你不知道有哪些字段,可以通过MediaStore.Images.ImageColumns查到所有字段,你也可以通过以下方式获取所有的字段

String [] columnNames = mCursor.getColumnNames();

正确姿势

//图片类型的Uri路径

final Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

//按照图片修改时间,筛选出jpeg和png类型的图片

Cursor mCursor =mContext.getContentResolver()

.query(uri,null,MediaStore.Images.ImageColumns.MIME_TYPE + "=? or "+ MediaStore.Images.ImageColumns.MIME_TYPE + "=?",

new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED);

if(mCursor!=null){

while(mCursor.moveToNext()){

//获取图片路径

String path = mCursor.getString(mCursor

.getColumnIndex(MediaStore.Images.ImageColumns.DATA));

//获取修改日期

long date = mCursor.getLong(mCursor

.getColumnIndex(MediaStore.Images.ImageColumns.DATE_MODIFIED));

//do something

}

}

由于数据量可能会很大,建议将查询等操作放到子线程进行,避免阻塞主线程

利用ContentProvider,我们既可以获取本地的图片,实现我们自定义的选图功能,可以获取通讯录,实现自定义的联系人界面,也可以获取短信记录,完成对应的页面功能效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android的contentprovider多媒体,Android利用ContentProvider获取本地数据的方法相关推荐

  1. android 获取加速度传感器值,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...

    本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...

  2. android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...

    本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...

  3. 利用Tushare获取金融数据

    利用Tushare获取金融数据 开发背景 Tushare社区 Tushare安装 Tushare使用 Tushare获取金融数据 1.获取A股列表 2.获取单只A股行情数据 3.获取多只A股数据 4. ...

  4. win摄像头怎么在linux,如何利用Video4Linux获取摄像头数据

    Video4Linux是Linux下用于获取视频和音频数据的API接口,在这篇文章中,着重阐述如何利用Video4Linux获取摄像头数据,以实现连续影像的播放. 1. 摄像头的安装 在 Linux下 ...

  5. 【Power Automate系列教程】利用API获取JSON数据定时每日自动写入List

    利用API获取JSON数据定时每日自动写入List 在知识星球的后台有个看数据的界面: 通过简单的抓包可以看到是个json数据,那么就有了想法! 获取到请求的api,发现规律: https://api ...

  6. js 用下标获取map值_js map方法处理返回数据,获取指定数据简写方法

    map方法处理返回数据,获取指定数据简写方法 前言 后端返回数据为数组列表时,通常比较全面,包含了很多不需要的数据,可以通过 map 方法处理返回数据,筛选出想要的数据 例如 // 返回数据 res ...

  7. JQuery 获取本地图片的方法

    个人网站名称:Advance 网站地址:https://jiaoqianjin.cn/ 须知少时凌云志,曾许人间第一流. 获取本地图片可以使用FileReader对象中的readAsDataURL方法 ...

  8. 介绍一种在MATLAB中获取股市数据的方法

    介绍一种在MATLAB中获取股市数据的方法: >>clear >>c=yahoo 系统会返回 c = url: 'http://finance.yahoo.com'       ...

  9. Android SDK22以下 读写手机存储权限获取失败问题处理方法

    针对小米手机sdk22以下sdk获取不到文件 存储权限问题. /****************** Android SDK22 读写手机存储权限获取问题处理方法 ****************** ...

最新文章

  1. Machine Learning——DAY1
  2. java中字符串压缩成bcd码_Java 压缩 / 解压缩字符串
  3. Jenkins部署:The username and password you provided are not correct (error 401)
  4. [CODEVS 3037] 线段覆盖 5
  5. apk私钥_使用source/build/target/product/security/中的密钥将apk签署为系统
  6. centos远程mc服务器,Centos7 下最最最简单的部署 MC 服务器超轻松学废
  7. Java中的数据类型及相互转换方法
  8. pg加密扩展的安装_postgresql的加密扩展插件pgcrypto
  9. python代码性能分析_使用memory_profiler对代码进行性能分析会增加执行时间
  10. was环境访问https_Go语言笔记|02-开发环境搭建
  11. JAVA学习-JAVA实现一元二次方程求解
  12. 像中文的罗马音字体复制_罗马音字体大全可复制中文
  13. 【R语言技巧】apply篇 sumNotes
  14. 计算机打不开网络共享,电脑的网络和共享中心打不开,网络发现又没打开,..._网络编辑_帮考网...
  15. 魅魔php影视系统,魅魔全新且强大的视频电影程序(MacCMS PHP) 6.1 20120511
  16. fuse文件系统调试环境
  17. JAVA图形面积与周长(抽象类)
  18. 主要的几个脑网络——整理自eegfmri的博客
  19. 谈谈30这个程序员迷茫的年龄
  20. xp系统开机自检很久_xp系统开机慢怎么解决两种提升电脑开机速度方法

热门文章

  1. IP地址的分配(计算机网络)
  2. 赛元触摸单片机调试记录
  3. cleanmymac到底好不好用?有必要买吗
  4. 使用 qrcode 生成二维码
  5. Steiner 椭圆及其结论
  6. 金钱压的我透不过气了
  7. 华为路由器 批量生成NAT映射配置
  8. (12) TEBD算法(时间演化块消减算法)
  9. 电信智能手机android,中国电信明提3G终端重点打造Android智能手机
  10. dht java_一个java版本的dht网络爬虫,伪装dht节点获取hashinfo