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を返します...
その状況は?