文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android读取本地照片和视频相册实例代码

2023-05-31 02:53

关注

前言

项目中经常要选择本地照片或者视频的需求,如果去扫描整个SD卡就太耗时间,其实Android系统在启动时就已经把整个设备中的多媒体文件信息(文件名,类型,大小等)都存到了数据库,然后提供了ContentPrivider这个API来管理这个数据库,我们可以利用ContentPrivider来获取所有的照片和视频。

ContentPrivider初识

先看下管理的的数据库在哪

data/data/目录下:有很多这种文件夹(日历,联系人,下载管理,多媒体等)

Android读取本地照片和视频相册实例代码

我们需要的照片和视频就在media下面,进去看看。进去找到database然后打开external.db,就可以看到多张表(音频,文件,Log,图像,视频等)

Android读取本地照片和视频相册实例代码

照片相册

那么获取照片直接通过 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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯