当前位置:   article > 正文

android 获取多媒体文件方式_android 如何读取媒体文件

android 如何读取媒体文件

前提:由于6.0以后读取存储文件属于危险权限,需要动态申请权限

  1.     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  2.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

1、借助系统自带的文件浏览器

    这种方式定制化能力为0,但实现实现起来很简单

  1.     /**
  2.     *    开启文件浏览器
  3.     */
  4.     Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
  5.     // image/* :图片类型资源   audio/*:音频文件   video/*:视频文件
  6.     intent.setType("*/*");
  7.     intent.addCategory(Intent.CATEGORY_OPENABLE);
  8.     //设置多选
  9.     intent.putExtra(EXTRA_ALLOW_MULTIPLE, true);    
  10.     startActivityForResult(intent,1);

  之后获取回调结果

  1. @Override
  2.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3.         super.onActivityResult(requestCode, resultCode, data);
  4.         //判断是否选择
  5.         if(requestCode == Activity.RESULT_OK){
  6.             Uri uri = data.getData();   //获得到文件uri
  7.             /**
  8.              * 后续若需要file或绝对路劲在根据uri转
  9.              */
  10.         }
  11.     }

 

2、借助MediaStore
    MediaStore是android系统提供的一个多媒体数据库,专门用于存放多媒体信息的,通过ContentResolver即可对数据库进行操作。

    MediaStore.Files: 共享的文件,包括多媒体和非多媒体信息

    MediaStore.Audio: 存放音频信息

    MediaStore.Image: 存放图片信息

    MediaStore.Vedio: 存放视频信息

    

  1. //以查找视频为例
  2. void getVideo() {
  3. List<String> list = new ArrayList<>();
  4. String[] projection = new String[]{MediaStore.Video.Media.DATA, MediaStore.Video.Media
  5. .DURATION};
  6. Cursor cursor = context.getContentResolver().query(
  7. MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null,
  8. null, MediaStore.Video.VideoColumns.IS_PRIVATE);
  9. while (cursor.moveToNext()) {
  10. String path = cursor
  11. .getString(cursor
  12. .getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
  13. long duration = cursor
  14. .getInt(cursor
  15. .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
  16. list.add(path);
  17. }
  18. cursor.close();
  19.     }

    其中 cursor的query步骤的参数:
    public final Cursor query(
    Uri uri,                //数据资源路径
    String[] projection,    //查询的列
    String selection,       //查询的条件
    String[] selectionArgs, //条件填充值
    String sortOrder){} 

 

获取音乐文件

  1. fun getMusicFromSD(context: Context):ArrayList<Song>{
  2. var tmpList:ArrayList<Song> = ArrayList()
  3. val cursor:Cursor = context.contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
  4. null,null,null,
  5. MediaStore.Audio.Media.DEFAULT_SORT_ORDER)
  6. while(cursor.moveToNext()){
  7. var tmpSong = Song(
  8. cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)),
  9. cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)),
  10. cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)),
  11. cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)),
  12. cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE))
  13. )
  14. tmpList.add(tmpSong)
  15. }
  16. return tmpList
  17. }


对于查找到的对象,可以构建自己的base类进行封装,可获到到文件名,大小,路劲,作者等资源特有类型

MediaStore官方文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/175263
推荐阅读
相关标签