[英]How to get path from SDcard in android for audio, video, image, files?
[英]How to get audio files from Private folder path in android
我正在嘗試從音樂播放器的私人文件夾中檢索音頻文件。
下面是我的代碼 -
public ArrayList<MusicFiles> getAllAudio(Context context){
SharedPreferences preferences = getSharedPreferences(MY_SORT_PREF, MODE_PRIVATE);
String sortOrder = preferences.getString("sorting", "sortByName");
ArrayList<String> duplicate = new ArrayList<>();
albums.clear();
ArrayList<MusicFiles> tempAudioList = new ArrayList<>();
String order = null;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
switch (sortOrder){
case "sortByName":
order = MediaStore.MediaColumns.DISPLAY_NAME + " ASC";
break;
case "sortByDate":
order = MediaStore.MediaColumns.DATE_ADDED + " ASC";
break;
case "sortBySize":
order = MediaStore.MediaColumns.SIZE + " DESC";
break;
}
String[] projection = {
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media._ID
};
String folder = getApplicationContext().getDir("Songs", MODE_PRIVATE).getAbsolutePath();
String selection = MediaStore.Audio.Media.DATA + " LIKE ? AND " + MediaStore.Audio.Media.DATA + " NOT LIKE ? ";
String[] selectionArgs = new String[]{
"%" + folder + "%",
"%" + folder + "/%/%"
};
Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, order);
if(cursor != null){
while(cursor.moveToNext()){
String album = cursor.getString(0);
String title = cursor.getString(1);
String duration = cursor.getString(2);
String path = cursor.getString(3);
String artist = cursor.getString(4);
String id = cursor.getString(5);
MusicFiles musicFiles = new MusicFiles(path, title, artist, album, duration, id);
//for checking
Log.e("Path: " + path, "Album : " + album);
tempAudioList.add(musicFiles);
if(!duplicate.contains(album)){
albums.add(musicFiles);
duplicate.add(album);
}
}
cursor.close();
}
return tempAudioList;
}
MediaStore
無權訪問應用程序的內部存儲,因此MediaStore
不會索引它們。
您可以使用普通文件系統 API(例如File
上的listFiles()
)來處理內部存儲。
請注意,您不需要在上面的代碼片段中使用getApplicationContext()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.