赞
踩
前提:由于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类进行封装,可获到到文件名,大小,路劲,作者等资源特有类型
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。