我是小米手机,最近在研究读取下载的音视频文件。
me是个大老粗,平时也不听歌什么的,写程序是临时通过微信的“文件传输助手”下载了几个mp3,结果什么也没读出来。
权限我写的是
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
读取文件的代码如下
@SuppressLint("Range")
private void loadLocalMusicData() {
/* 加载本地存储当中的音乐mp3文件到集合当中*/
// 1.获取ContentResolver对象
ContentResolver resolver = getContentResolver();
// 2.获取本地音乐存储的Uri地址
// MediaStore.Video.Media.EXTERNAL_CONTENT_URI 获取视频
// MediaStore.Images.Media.EXTERNAL_CONTENT_URI //获取图片
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
// 3 开始查询地址
Cursor cursor = resolver.query(uri, null, null, null, null);
// 4.遍历Cursor
int id = 0;
Log.d("LKFTAG", "loadLocalMusicData");
while (cursor.moveToNext()) {
Log.d("LKFTAG", "cursor.moveToNext():");
String song = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));//歌曲标题
String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//歌手
String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));//专辑
id++;
String sid = String.valueOf(id);
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));//路径
long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//时长
SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
String time = sdf.format(new Date(duration));
// 获取专辑图片主要是通过album_id进行查询
String album_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
String albumArt = getAlbumArt(album_id);
// 将一行当中的数据封装到对象当中
LocalMusicBean bean = new LocalMusicBean(sid, song, singer, album, time, path,albumArt);
mDatas.add(bean);
}
// 数据源变化,提示适配器更新
adapter.notifyDataSetChanged();
}
private String getAlbumArt(String album_id) {
String mUriAlbums = "content://media/external/audio/albums";
String[] projection = new String[]{"album_art"};
Cursor cur = this.getContentResolver().query(
Uri.parse(mUriAlbums + "/" + album_id),
projection, null, null, null);
String album_art = null;
if (cur.getCount() > 0 && cur.getColumnCount() > 0) {
cur.moveToNext();
album_art = cur.getString(0);
}
cur.close();
cur = null;
return album_art;
}
该回答引用GPT与博主@晓码自在合作编写:
根据您提供的代码和描述,读取本地音乐文件失败的原因可能有:
xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
java
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE};
java
String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
File file = new File(filePath);
if (file.exists()) {
// 路径正确,可以读取文件
} else {
// 路径不正确,结束流程
}