0

J'ai une application contenant différentes images en utilisant ImageView et ViewPager. Je veux enregistrer l'image actuelle montrée par ImageView dans SD Storage. Mais il a toujours enregistré dans Phone Storage avec succès. Je veux enregistrer l'image dans SD Card et a également enregistré l'image ne montrant pas dans Gallery Pourquoi? Veuillez me aider dans ce numéro:Image enregistrée dans le stockage de téléphone au lieu d'une carte SD et n'apparaissant pas dans la galerie de téléphone Pourquoi?


public void SaveIamge() { 
     String root = Environment.getExternalStorageDirectory().toString(); 
     File myDir = new File(root + "/Cute_Baby_Images"); 
     myDir.mkdirs(); 
     Random generator = new Random(); 
     int n = 10000; 
     n = generator.nextInt(n); 
     String fname = "Image-"+ n +".jpg"; 
     File file = new File (myDir, fname); 
     int currentImagePos = viewPager.getCurrentItem(); 
     Drawable drawable = viewPager.getResources().getDrawable(images[currentImagePos]); 
     Bitmap finalBitmap = ((BitmapDrawable) drawable).getBitmap(); 

     if (file.exists()) file.delete(); 
     try { 
      FileOutputStream out = new FileOutputStream(file); 
      finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 

      out.flush(); 
      out.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Toast.makeText(this, "Sucessfully Save Image", Toast.LENGTH_LONG).show(); 

    } 
+0

jetez un oeil à https://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String) pour créer votre fichier. – Daivid

+0

Veuillez mettre à jour mon code, je n'ai pas compris le lien. –

Répondre

0

Environment.getExternalDirectory() retours mémoire du téléphone. Pour obtenir l'emplacement de la carte SD, vérifiez Find an external SD card location

Pour faire apparaître les images dans la galerie, vous devez laisser le scanner multimédia analyser le fichier en utilisant MediaScannerConnection.scanFile() Check Image, saved to sdcard, doesn't appear in Android's Gallery app

+0

Veuillez me dire quelle est la fonction pour obtenir un stockage externe (carte SD)? –

+0

Voir cette réponse: https://stackoverflow.com/a/15612964/5137352 –

+0

Je ne peux pas comprendre le lien .. Pouvez-vous modifier mon code, je serai très reconnaissant à vous. –

0

Créer une fonction appelée getDirectory()

private static File getDirectory(String variableName, String... paths) { 
    String path = System.getenv(variableName); 
    if (!TextUtils.isEmpty(path)) { 
     if (path.contains(":")) { 
      for (String _path : path.split(":")) { 
       File file = new File(_path); 
       if (file.exists()) { 
        return file; 
       } 
      } 
     } else { 
      File file = new File(path); 
      if (file.exists()) { 
       return file; 
      } 
     } 
    } 
    if (paths != null && paths.length > 0) { 
     for (String _path : paths) { 
      File file = new File(_path); 
      if (file.exists()) { 
       return file; 
      } 
     } 
    } 

    //If any there is no SECONDARY STORAGE are detected return INTERENAL STORAGE 
    return Environment.getExternalStorageDirectory(); 
} 

Modifier votre code à

public void SaveIamge() { 

    String root = getDirectory("SECONDARY_STORAGE").getAbsolutePath(); 
    File myDir = new File(root + "/Cute_Baby_Images"); 
    myDir.mkdirs(); 
    Random generator = new Random(); 
    int n = 10000; 
    n = generator.nextInt(n); 
    String fname = "Image-"+ n +".jpg"; 
    File file = new File (myDir, fname); 
    int currentImagePos = viewPager.getCurrentItem(); 
    Drawable drawable = viewPager.getResources().getDrawable(images[currentImagePos]); 
    Bitmap finalBitmap = ((BitmapDrawable) drawable).getBitmap(); 

    if (file.exists()) file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 

     out.flush(); 
     out.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    Toast.makeText(this, "Sucessfully Save Image", Toast.LENGTH_LONG).show(); 
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + root))); 
} 

J'ai a ajouté un broadcast pour notifier le MediaScanner de re-scanner le système de fichiers pour les nouveaux fichiers. Cela permettra de résoudre le problème des images ne sont pas visibles dans la galerie.

+0

Il n'y a aucun changement dans l'application. Les images sont à nouveau enregistrées dans le stockage interne, pas de stockage externe, veuillez me aider à enregistrer des images dans le stockage externe, votre code ne montre que des images dans la galerie. –

+0

@ AndroidLearner541 Collez les autorisations que vous utilisez –

+0

@ AndroidLearner541 Vérifiez que le code modifié fonctionne correctement pour moi –