在Android上查找作品文件

问题描述 投票:0回答:1

自最近以来,我就在音乐库中使用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());

有人知道问题出在哪里,还是知道任何解决方法?任何帮助,将不胜感激。

android audio-player android-cursor opus
1个回答
0
投票

最好的方法是使用查询/光标。但是,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查询,但是:

  • 基于MIME类型的约束,和
  • 使用MediaStore.Files代替MediaStore.Audio

这在Android 10及更高版本上也将不起作用,但是如果能够,它将比您自己扫描音乐目录树更快。

并且除非MediaStore.Audio开始为Opus文件建立索引,否则在Android 10及更高版本上,您将找不到理想的解决方案。最好是ACTION_OPEN_DOCUMENT_TREE,因此用户可以将您指向包含Opus文件的文档树,然后您将在该树中扫描Opus MIME类型的文档。这可能有用,但也可能很慢。

© www.soinside.com 2019 - 2024. All rights reserved.