0

いくつかの異なるユースケースからの曲からアーティストとトラックを取得するという非常に具体的なニーズがあります。通常、mp3 uri (scheme: content://) から MediaStore をクエリすることは非常に簡単ですが、代わりにファイル パス (scheme: file://) を受け取ることがあります。StackOverflow に関するこの投稿に出くわしました: Get MediaStore content Uri from File path?

残念ながら、私にはうまくいかないようです。私は間違いなくどこかで何か間違ったことをしていますが、どこにあるのかわかりません。私が使用するコードは次のとおりです。コードに指定した filePath は、実行前に検証されます。

コードの一部は次のとおりです。

    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();
}

そして、ここに関連するlogcatがあります:

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): <<<<<

リクエストしているコラムを少しいじってみましたが、成功しませんでした。

4

1 に答える 1

0

疑問に思っている人のために、私は自分の質問に対する答えを自分で見つけました、そしていくつかのことがこのことをうまく機能させるのを妨げました。1つ目は、取得したファイルパスに表示されているスペースが次のようにエンコードされていることです%20。ただし、スペースだけであるMediaStoreため、一致させることはできませんでした。2つ目は、取得したファイルにfile://スキームがMediaStore含まれていないことです。

私は基本的にこれを行うことで問題を解決しました:

    filePath = filePath.replace("file://", "");
    filePath = filePath.replace("%20", " ");
于 2013-01-21T21:25:45.677 に答える