Android Q讀寫共享目錄媒體文件

Android Q讀寫共享目錄媒體文件

有些人通過文件名稱去查找共享目錄下媒體文件卻獲取不到,可能是由於查詢條件寫錯了。注意下MediaStore.Video.Media.DISPLAY_NAME 參數,我用MediaStore.Video.Media.BUCKET_DISPLAY_NAME這個就查詢不到,具體這兩個有什麼不同,可以自己去查資料。

1.在共享目錄中保存圖片視頻,下面給出的代碼是保存圖片,要保存視頻就把MediaStore.Images改成MediaStore.Video就可以。

/**
 * 保存圖片到共享目錄,不用SAF存儲
 * @param context
 * @param bitmap  圖片bitmap
 * @param fileName  圖片名稱
 * @param mime_type 類型:圖片爲image/jpeg,視頻爲video/mpeg
 */
public static boolean addPictureToAlbum(Context context, Bitmap bitmap, String fileName,String mime_type) {
    ContentValues contentValues = new ContentValues();
    contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
    contentValues.put(MediaStore.Images.Media.DESCRIPTION, fileName);
    contentValues.put(MediaStore.Images.Media.MIME_TYPE, mime_type);
    Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
    OutputStream outputStream = null;
    try {
        outputStream = context.getContentResolver().openOutputStream(uri);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

2.讀取共享目錄下的圖片

/**
     * 讀取共享目錄下圖片文件
     * @param context  上下文
     * @param filename 文件名稱(帶後綴a.jpg),是MediaStore查找文件的條件之一
     * @return
     */
    public static List<InputStream> getImageFile(Context context, String filename)  {
        String[] projection = {MediaStore.Images.Media._ID,
                MediaStore.Images.Media.DATA,
                MediaStore.Images.Media.DATE_ADDED,
                MediaStore.Images.Thumbnails.DATA
        };
        List<InputStream> insList = new ArrayList<>();
        ContentResolver resolver = context.getContentResolver();
        String sortOrder = MediaStore.Images.Media.DATE_MODIFIED + " DESC";//根據日期降序查詢
        String selection = MediaStore.Images.Media.DISPLAY_NAME + "='" + filename + "'";   //查詢條件 “顯示名稱爲?”
        Cursor cursor =  resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, null, sortOrder);
        if (cursor != null && cursor.moveToFirst()) {
            //媒體數據庫中查詢到的文件id
            int columnId = cursor.getColumnIndex(MediaStore.Images.Media._ID);
            do {
                //通過mediaId獲取它的uri
                int mediaId = cursor.getInt(columnId);
//                String tPath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); //獲取圖片路徑
                Uri itemUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + mediaId );
                try {
                    //通過uri獲取到inputStream
                    ContentResolver cr = context.getContentResolver();
                    InputStream ins=cr.openInputStream(itemUri);
                    insList.add(ins);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            } while (cursor.moveToNext());
        }
        return insList;
    }

3.讀取共享目錄下的視頻

/**
     * 讀取共享目錄下視頻文件
     * @param context
     * @param filename 文件名稱(帶後綴a.mp4),是MediaStore查找文件的條件之一
     * @return
     */
    public static List<InputStream> getVideoFile(Context context, String filename)  {
        String[] projection = {MediaStore.Video.Media._ID,
                MediaStore.Video.Media.DATA,
                MediaStore.Video.Media.DATE_ADDED,
                MediaStore.Video.Thumbnails.DATA
        };
        List<InputStream> insList = new ArrayList<>();
        ContentResolver resolver = context.getContentResolver();
        String sortOrder = MediaStore.Video.Media.DATE_MODIFIED + " DESC";//根據日期降序查詢
        String selection = MediaStore.Video.Media.DISPLAY_NAME + "='" + filename + "'";   //查詢條件 “顯示名稱爲?”
        Cursor cursor =  resolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, selection, null, sortOrder);
        if (cursor != null && cursor.moveToFirst()) {
            //媒體數據庫中查詢到的文件id
            int columnId = cursor.getColumnIndex(MediaStore.Video.Media._ID);
            do {
                //通過mediaId獲取它的uri
                int mediaId = cursor.getInt(columnId);
//                String tPath = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)); //獲取圖片路徑
                Uri itemUri = Uri.withAppendedPath(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, "" + mediaId );
                try {
                    //通過uri獲取到inputStream
                    ContentResolver cr = context.getContentResolver();
                    InputStream ins=cr.openInputStream(itemUri);
                    insList.add(ins);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            } while (cursor.moveToNext());
        }
        return insList;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章