1

我试图在我的应用程序中包含一个文件夹浏览器元素,该元素在单击音频文件时会在 MediaStore 中找到该文件并返回它的_ID。

我遇到的问题之一是,对于某些设备,绝对文件路径似乎工作正常,但对于其他设备,我需要规范路径。在某些情况下,它根本不起作用!

String canonicalPath = file.getCanonicalPath();
String absolutePath = file.getAbsolutePath();

值得一提的是,“文件”是从根“/”创建的,而不是从 getExternalStorageDirectory() 创建的(因为某些音频文件可能位于内部 sd 或其他地方)。

所以查询看起来像这样:

Cursor cursor = getActivity().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cols,  MediaStore.MediaColumns.DATA + "= ? ", new String[]{absolutePath}, null);

如果失败,我对 canonicalPath 执行相同的查询,看看是否可行。问题是它在许多不同的设备上都失败了,具体取决于文件结构。

在我的特定设备(Galaxy S2)上,绝对路径和规范路径之间的区别通常如下:

/extSdCard/Music/myFile.mp3
/storage/sdcard1/Music/myFile.mp3

假设文件在 MediaStore 中总是有一个 ID,我错了吗?有没有更好的方法来找到文件的“实际”路径,或者有更好的方法来构造查询以获取文件的 id?由于查询未返回和游标项(换句话说,它无法找到 MediaColumns.DATA 等于传入的绝对路径或规范路径的任何地方),它在各种设备上到处崩溃。

我想我只是在寻找一种方法来进行更防故障的查询。找到音频文件的路径或 id 的更好方法。任何想法,将不胜感激。

4

0 回答 0