android 获取多媒体文件方式

mac2025-02-25  5

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

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

 

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

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

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

  之后获取回调结果

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

 

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

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

    MediaStore.Audio: 存放音频信息

    MediaStore.Image: 存放图片信息

    MediaStore.Vedio: 存放视频信息

    

//以查找视频为例 void getVideo() { List<String> list = new ArrayList<>(); String[] projection = new String[]{MediaStore.Video.Media.DATA, MediaStore.Video.Media .DURATION}; Cursor cursor = context.getContentResolver().query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Video.VideoColumns.IS_PRIVATE); while (cursor.moveToNext()) { String path = cursor .getString(cursor .getColumnIndexOrThrow(MediaStore.Video.Media.DATA)); long duration = cursor .getInt(cursor .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION)); list.add(path); } cursor.close();     }

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

 

获取音乐文件

fun getMusicFromSD(context: Context):ArrayList<Song>{ var tmpList:ArrayList<Song> = ArrayList() val cursor:Cursor = context.contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,null,null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER) while(cursor.moveToNext()){ var tmpSong = Song( cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)), cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)), cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)), cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)), cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)) ) tmpList.add(tmpSong) } return tmpList }

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

MediaStore官方文档

最新回复(0)