2017-08-29 4 views
1

So war ich nach dem Android-Tutorial Capture (mit Kamera Absicht) EinfachAndroid: zu getExternalPublicStorageDirectory speichern und in der Galerie Anzeigen

Im Tutorial die getExternalStoragePublicDirectory Aufruf heißt es ausdrücklich, wenn zu verwenden (Erstellen des Bildes „Datei“) Bilder speichern, jedoch in ihrem Beispiel verwenden sie getExternalStorageDirectory. Im Grunde ist es ein "wie ich sage nicht wie ich es tue" Beispiel.

Also versuchte ich mit dem GetExternalStoragePublicDirectory alle Arten von Fehlern auftauchen. Ich habe es schließlich zum Laufen gebracht und ich kann sehen, dass diese Dateien wirklich über die ADB-Shell existieren. Für das Leben von mir kann ich sie nicht dazu bringen, in der Galerie zu erscheinen. Die Verwendung der Medienscannerverbindung zum Scannen der Datei scheint den Trick nicht zu erfüllen. Weiß jemand, wie man die Datei in der Galerie erscheinen lässt?

Code-Schnipsel:

private File createImageFile() throws IOException { // Create an image file name 
     String timeStamp = new 
     SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     File pictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 


     // if the file does not exist, then create the file. 
     if(!pictureDir.exists()) 
     { 
      pictureDir.mkdirs(); 
     } 

     File image = File.createTempFile(
       imageFileName, /* prefix */ 
       ".jpg",   /* suffix */ 
       pictureDir  /* directory */ 
     ); 

     boolean exists = image.exists(); 

     this.currentPhotoPath = image.getAbsolutePath(); 

     // Save a file: path for use with ACTION_VIEW intents 
     return image; 
    } 

    private void dispatchTakePictureIntent() 
    { 

    verifyStoragePermissions(this); 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

     // i believe this is checking if the activity exists. 
     if(takePictureIntent.resolveActivity(getPackageManager()) != null) 
     { 
      File imageFile = null; 

      try 
      { 
       imageFile = createImageFile(); 
      } 
      catch (IOException e) 
      { 
       Log.i("sf", e.getMessage()); 
       Log.i("sf",e.getCause().getMessage()); 
      } 

      if(imageFile != null) 
      { 
       imageFile.toURI(); 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageFile.toURI()); 
       startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
      } 
     } 
    } 

     private void addGalleryPic() throws IOException { 
      Intent mediaScanIntent = new 
      Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
      File f = new File(this.currentPhotoPath); 

      if(f.exists()) 
      { 
       Log.i("sdf", f.getAbsolutePath() + " exists"); 

      } 

      MediaScannerConnection.scanFile(this, 
        new String[]{currentPhotoPath}, null, 
        new MediaScannerConnection.OnScanCompletedListener() { 
         public void onScanCompleted(String path, Uri uri) { 
          String p = uri.getPath(); 
          Log.i("ExternalStorage", "Scanned " + path + ":"); 
          Log.i("ExternalStorage", "-> uri=" + uri); 
         } 
        }); 
     } 
+0

"mit dem Medienscanner Verbindung zum Scannen der Datei scheint nicht den Trick zu tun" - es sollte. Ich sehe jedoch nicht, wo Sie 'addGalleryPic()' aufrufen. – CommonsWare

+0

Ich habe es nicht aufgenommen, da angenommen wird, dass ich das in der OnActivityResult-Überschreibung getan habe. @CommonsWare – j209

+0

Dann ist 'currentPhotoPath' möglicherweise 'null', da ich nicht sehe, wie Sie es im gespeicherten Instanzzustand' Bundle' speichern und Ihr Prozess möglicherweise beendet wird, während sich die Kamera-App im Vordergrund befindet. – CommonsWare

Antwort

0

Versuchen Sie, sie in dem internen Speicher sparend, wenn das Telefon in dem internen Speicher keine Fotos abholen sollte.

Hoffe es hilft!

Verwandte Themen