web-dev-qa-db-fra.com

Comment enregistrer le fichier sur le stockage du public (externe) sur Android Q (API 29)?

J'utilise un stockage externe afin d'enregistrer un type de fichier différent. Que les fichiers doivent être visibles pour l'utilisateur. Et maintenant de Android Q, la méthode getExternalStoragePublicDirectory() a été obsolète GetExternalstoragePublicDirectory (Docs) .

J'ai utilisé le code suivant:

File externalFilesDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "DirectoryName");

Y a-t-il un autre moyen de sauvegarder des fichiers qui seront visibles pour l'utilisateur?

12
t.jancic

Vous devez ajouter un chèque pour Android Q. Supposons que vous souhaitiez enregistrer l'image dans votre dossier de téléchargement public.

try{
     OutputStream fos;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
       ContentResolver resolver = context.getContentResolver();
       ContentValues contentValues = new ContentValues();
       contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);
       contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg");
       contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
       Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
       fos = resolver.openOutputStream(Objects.requireNonNull(imageUri));
    } else {
       String imagesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
       File image = new File(imagesDir, fileName);
       fos = new FileOutputStream(image);
    }
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
     Objects.requireNonNull(fos).close();
}catch (IOException e) {
  // Log Message
}
0
Nauman Ash