簡體   English   中英

如何從 android 中的私有文件夾路徑獲取音頻文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM