前言
项目中经常要选择本地照片或者视频的需求,如果去扫描整个SD卡就太耗时间,其实Android系统在启动时就已经把整个设备中的多媒体文件信息(文件名,类型,大小等)都存到了数据库,然后提供了ContentPrivider这个API来管理这个数据库,我们可以利用ContentPrivider来获取所有的照片和视频。
ContentPrivider初识
先看下管理的的数据库在哪
data/data/目录下:有很多这种文件夹(日历,联系人,下载管理,多媒体等)
我们需要的照片和视频就在media下面,进去看看。进去找到database然后打开external.db,就可以看到多张表(音频,文件,Log,图像,视频等)
照片相册
那么获取照片直接通过 ContentProvider读取Images这个数据库就OK了,这里开启工作线程读取所有.jpeg和.png的图片,附上代码段:
private void getAllPhotoInfo() { new Thread(new Runnable() { @Override public void run() { List<MediaBean> mediaBeen = new ArrayList<>(); HashMap<String,List<MediaBean>> allPhotosTemp = new HashMap<>();//所有照片 Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; String[] projImage = { MediaStore.Images.Media._ID , MediaStore.Images.Media.DATA ,MediaStore.Images.Media.SIZE ,MediaStore.Images.Media.DISPLAY_NAME}; Cursor mCursor = getContentResolver().query(mImageUri, projImage, MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?", new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED+" desc"); if(mCursor!=null){ while (mCursor.moveToNext()) { // 获取图片的路径 String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)); int size = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Images.Media.SIZE))/1024; String displayName = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)); //用于展示相册初始化界面 mediaBeen.add(new MediaBean(MediaBean.Type.Image,path,size,displayName)); // 获取该图片的父路径名 String dirPath = new File(path).getParentFile().getAbsolutePath(); //存储对应关系 if (allPhotosTemp.containsKey(dirPath)) { List<MediaBean> data = allPhotosTemp.get(dirPath); data.add(new MediaBean(MediaBean.Type.Image,path,size,displayName)); continue; } else { List<MediaBean> data = new ArrayList<>(); data.add(new MediaBean(MediaBean.Type.Image,path,size,displayName)); allPhotosTemp.put(dirPath,data); } } mCursor.close(); } //更新界面 runOnUiThread(new Runnable() { @Override public void run() { //... } }); } }).start(); }
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容猜你喜欢
AI推送时光机Android读取本地照片和视频相册实例代码
后端开发2023-05-31
Android获取本地相册图片和拍照获取图片的实现方法
后端开发2022-06-06
咦!没有更多了?去看看其它编程学习网 内容吧