android的contentprovider多媒体,Android利用ContentProvider获取本地数据的方法
上一篇,我们讲到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获取本地数据的方法相关推荐
- android 获取加速度传感器值,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...
本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...
- android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...
本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...
- 利用Tushare获取金融数据
利用Tushare获取金融数据 开发背景 Tushare社区 Tushare安装 Tushare使用 Tushare获取金融数据 1.获取A股列表 2.获取单只A股行情数据 3.获取多只A股数据 4. ...
- win摄像头怎么在linux,如何利用Video4Linux获取摄像头数据
Video4Linux是Linux下用于获取视频和音频数据的API接口,在这篇文章中,着重阐述如何利用Video4Linux获取摄像头数据,以实现连续影像的播放. 1. 摄像头的安装 在 Linux下 ...
- 【Power Automate系列教程】利用API获取JSON数据定时每日自动写入List
利用API获取JSON数据定时每日自动写入List 在知识星球的后台有个看数据的界面: 通过简单的抓包可以看到是个json数据,那么就有了想法! 获取到请求的api,发现规律: https://api ...
- js 用下标获取map值_js map方法处理返回数据,获取指定数据简写方法
map方法处理返回数据,获取指定数据简写方法 前言 后端返回数据为数组列表时,通常比较全面,包含了很多不需要的数据,可以通过 map 方法处理返回数据,筛选出想要的数据 例如 // 返回数据 res ...
- JQuery 获取本地图片的方法
个人网站名称:Advance 网站地址:https://jiaoqianjin.cn/ 须知少时凌云志,曾许人间第一流. 获取本地图片可以使用FileReader对象中的readAsDataURL方法 ...
- 介绍一种在MATLAB中获取股市数据的方法
介绍一种在MATLAB中获取股市数据的方法: >>clear >>c=yahoo 系统会返回 c = url: 'http://finance.yahoo.com' ...
- Android SDK22以下 读写手机存储权限获取失败问题处理方法
针对小米手机sdk22以下sdk获取不到文件 存储权限问题. /****************** Android SDK22 读写手机存储权限获取问题处理方法 ****************** ...
最新文章
- Machine Learning——DAY1
- java中字符串压缩成bcd码_Java 压缩 / 解压缩字符串
- Jenkins部署:The username and password you provided are not correct (error 401)
- [CODEVS 3037] 线段覆盖 5
- apk私钥_使用source/build/target/product/security/中的密钥将apk签署为系统
- centos远程mc服务器,Centos7 下最最最简单的部署 MC 服务器超轻松学废
- Java中的数据类型及相互转换方法
- pg加密扩展的安装_postgresql的加密扩展插件pgcrypto
- python代码性能分析_使用memory_profiler对代码进行性能分析会增加执行时间
- was环境访问https_Go语言笔记|02-开发环境搭建
- JAVA学习-JAVA实现一元二次方程求解
- 像中文的罗马音字体复制_罗马音字体大全可复制中文
- 【R语言技巧】apply篇 sumNotes
- 计算机打不开网络共享,电脑的网络和共享中心打不开,网络发现又没打开,..._网络编辑_帮考网...
- 魅魔php影视系统,魅魔全新且强大的视频电影程序(MacCMS PHP) 6.1 20120511
- fuse文件系统调试环境
- JAVA图形面积与周长(抽象类)
- 主要的几个脑网络——整理自eegfmri的博客
- 谈谈30这个程序员迷茫的年龄
- xp系统开机自检很久_xp系统开机慢怎么解决两种提升电脑开机速度方法