Сохранить растровое изображение в каталоге костюмов - PullRequest
1 голос
/ 17 апреля 2020

У меня есть файл растрового изображения, и я не хочу сохранять его в каталоге костюмов или в пользовательском файле, например fashtion_project / images / pic1.png. Весь код, который я пробовал, устарел на android 10 или android P ie. мне нужен код для преобразования растрового изображения в файл и сохранения его в пользовательском файле

я пробовал этот код, и он не работает на всех устройствах

  void addImageToGallery(Bitmap bmp, Context context) {

        ContentValues values = new ContentValues();

        values.put(MediaStore.Images.Media.DISPLAY_NAME, "outfit");
        values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
        values.put(MediaStore.MediaColumns.RELATIVE_PATH, "Pictures/Shop/");
        values.put(MediaStore.Images.Media.IS_PENDING, 1);

        Uri collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
        Uri imageUri = context.getContentResolver().insert(collection, values);

        if (imageUri != null) {
            OutputStream out = null;
            try {
                out = context.getContentResolver().openOutputStream(imageUri);
            } catch (FileNotFoundException e) {
                toastError();
                e.printStackTrace();
            }
            bmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
            values.clear();
            values.put(MediaStore.Images.Media.IS_PENDING, 0);
            context.getContentResolver().update(imageUri, values, null, null);
            Toast.makeText(getActivity(), "success", Toast.LENGTH_SHORT).show();
        } else {
            toastError();
        }

    }

и до этого я проверял, доступно ли внешнее хранилище для чтения и записи, но это не работает на всех устройствах

/* Checks if external storage is available for read and write */
    public boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

что я могу сделать, чтобы решить эту проблему

...