自最近以来,我就在音乐库中使用OPUS文件格式。即使Android似乎support the OPUS file format natively,也没有多少音乐播放器列出以这种格式编码的音乐曲目。
我想创建自己的简单音乐播放器,列出OPUS编码的音轨。但是我不知道如何在系统上找到文件。
最好的方法是使用查询/光标。但是OPUS文件只是ignored:
Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null, null, null, null);
System.out.println(cursor.getCount()); //The size of my music library without .opus files
while (cursor.moveToNext()) {
//.mp3 and .flac files but no .opus files
System.out.println(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)));
}
然后我尝试手动访问我的音乐文件,但没有成功:
File musicDirectory = new File(getExternalFilesDir(Environment.DIRECTORY_MUSIC).toURI());
//This directory seems to be empty, length: 0
System.out.println(musicDirectory.list().length);
和:
File file = new File(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.getPath());
//Exists: false
System.out.println(file.exists());
有人知道问题出在哪里,还是知道任何解决方法?任何帮助,将不胜感激。
最好的方法是使用查询/光标。但是,OPUS文件只是被忽略
如果您的Opus文件与您的MP3和FLAC文件具有相似的年代(即,它们已经在您的测试设备上使用了很长的时间,那么MediaStore
可能不知道自动为它们建立索引。
然后我尝试手动访问我的音乐文件,但没有成功:
这里有几个问题:
File
构造函数和toURI()
的东西是没有意义的,因为getExternalFilesDir()
返回了File
File
指向您的external storage的应用程序特定部分,因此,除非您的Opus文件在那里,否则此File
不会列出它们Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
),则在Android 10及更高版本上不可用和:
A Uri
不是文件。调用方案为getPath()
以外的方案的Uri
上的file
是没有意义的,并且MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
的方案为content
知道任何解决方法吗?
您可以尝试MediaStore
查询,但是:
MediaStore.Files
代替MediaStore.Audio
这在Android 10及更高版本上也将不起作用,但是如果能够,它将比您自己扫描音乐目录树更快。
并且除非MediaStore.Audio
开始为Opus文件建立索引,否则在Android 10及更高版本上,您将找不到理想的解决方案。最好是ACTION_OPEN_DOCUMENT_TREE
,因此用户可以将您指向包含Opus文件的文档树,然后您将在该树中扫描Opus MIME类型的文档。这可能有用,但也可能很慢。