Получение записи ContentProvider из пути к файлу

У меня есть очень специфическая потребность в извлечении исполнителя и трека из песни, происходящей из нескольких разных вариантов использования. Обычно мне достаточно легко запросить MediaStore из mp3 uri (схема: content://), но иногда вместо этого я получаю путь к файлу (схема: file://). Я наткнулся на этот пост в StackOverflow: Получить Uri содержимого MediaStore из пути к файлу?

К сожалению, похоже, это не работает для меня. Я определенно делаю что-то не так где-то, но я не могу сказать, где. Вот код, который я использую, и путь к файлу, который я ему даю, проверяется перед его выполнением.

Вот кусок кода:

    private void getTrackFromFilePath(String filePath) {

    String[] filePathColumn = {
            MediaStore.Audio.Media.TITLE, //
            MediaStore.Audio.Media.ARTIST
    };

    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Logger.e(TAG, musicUri.toString() + " filePath: " + filePath);

    Cursor cursor = getContentResolver().query(musicUri, filePathColumn, MediaStore.Audio.Media.DATA + " LIKE ?", new String[] {
        filePath
    }, null);
    cursor.moveToFirst();

    DatabaseUtils.dumpCursor(cursor);

    cursor.close();
}

И вот связанный логарифм:

01-21 12:14:40.345: E/MusicScannerActivity(13513): content://media/external/audio/media filePath: file:///mnt/sdcard/Music/07%20Olly%20Murs%20Feat%20Flo%20Rida%20-%20Troublemaker.mp3
01-21 12:14:40.350: I/System.out(13513): >>>>> Dumping cursor android.content.ContentResolver$CursorWrapperInner@41e03748
01-21 12:14:40.350: I/System.out(13513): <<<<<

Я попытался немного поиграть со столбцами, которые я запрашиваю, но безуспешно.


person ben    schedule 21.01.2013    source источник


Ответы (1)


Для тех, кому интересно, я сам нашел ответ на свой вопрос, и несколько вещей мешали этой штуке работать. Первый заключается в том, что пробелы, представленные в пути к файлу, который я получал, были закодированы следующим образом: %20, но были просто пробелами в MediaStore, поэтому сопоставление не могло быть выполнено. Во-вторых, файл, который я получал, имел схему file://, которую не включает MediaStore.

Я в основном решил проблему, сделав это:

    filePath = filePath.replace("file://", "");
    filePath = filePath.replace("%20", " ");
person ben    schedule 21.01.2013