1

SDカードとextsdカードの両方に音楽があります

Cursor を使用してそれらをリストします。

Uri deviceMusic = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String sortOrder = MediaStore.Audio.Media.DISPLAY_NAME;
Cursor cursor = this.getContentResolver().query(deviceMusic, null,
            selection, null, sortOrder);

if (cursor == null || cursor.isClosed()) {
        return;
    }

// Get music information
if (cursor.moveToFirst()) {
       // File path
       String data = cursor.getString(cursor
                    .getColumnIndex(MediaStore.Audio.Media.DATA));
} while (cursor.moveToNext());

次に、以下のコードを使用して音楽の種類を判断します。

public static String getFileHeader(String filePath) {
    FileInputStream is = null;
    String value = null;
    try {
        is = new FileInputStream(filePath);
        byte[] b = new byte[3];
        is.read(b, 0, b.length);
        value = bytesToHexString(b);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (null != is) {
            try {
                is.close();
            } catch (IOException e) {
            }
        }
    }
    return value;
}

この方法はSDカードで正常に機能します。

しかし、extsdcard で「FileNotFoundException」が発生します

だから私はハードコードでファイルをチェックしようとします:

File file = new File(
            "/storage/extSdCard/(I Can't Help) Falling In Love With You - UB 40.mp3");

    if (file.exists()) {
        Log.i("", "");
    }

のループで上記のコードが実行されると、false が返されます。

while (cursor.moveToNext())

しかし、onCreateなどの他の場所でハードコーディングすると

それはtrueを返します...

その状況は?

4

0 に答える 0