2016-07-31 34 views
-2

Gemäß diesem Link (How to programmatically take a screenshot in Android?) habe ich die Antwort verwendet, um eine Aufnahme zu machen und sie auf dem externen Speicher meines Geräts zu speichern.Bildschirmaufnahmedatei wird nicht gespeichert

Ich habe alle Berechtigungen gelöscht, und nach dem Protokoll ist die Datei überhaupt nicht leer. Aber ich kann die Datei weder in der Galerie noch im Datei-Explorer finden.

Warum passiert das? Kann mir jemand dabei helfen?

+0

Nach diesem Code ('String mPath = Environment.getExternalStorageDirectory(). ToString() +"/"+ jetzt +" .jpg ";'), speichern Sie es weder in die Galerie noch auf die ** externer Speicher. Lassen Sie sich nicht durch den Namen dieser Methode täuschen: [getExternalStorageDirectory()] (https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()). –

+0

Aber die folgenden Codes scheinen das aufgenommene Bild in eine Datei mit diesem Verzeichnis zu bringen. Wird das nicht in diesem Verzeichnis gespeichert? – March3April4

+0

Nicht auf den ** externen ** Speicher, wie Sie es meinen. Bitte lesen Sie die offiziellen Dokumente, die in meinem vorherigen Kommentar verlinkt sind. –

Antwort

1

In Bezug auf Rotwang habe ich herausgefunden, was das Problem war.

Der Pfad von getExternalStorageDirectory() hat kein gültiges Verzeichnis für die zu speichernde Datei zurückgegeben.

In meinem Fall ging es darum, Screenshots zu speichern, damit der Benutzer auf die Galerie schauen konnte.

Also habe ich Environment.getExternalStoragePublicDirectory ( Environment.DIRECTORY_PICTURES); stattdessen.

So ist der vollständige Code zum Speichern einer Bildschirmaufnahme unten.

private void takeScreenshot() { 
    Date now = new Date(); 
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now); 

    try { 

     File path = Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES); 
     File file = new File(path, now + ".jpg"); 

     path.mkdirs(); 

     View v1 = getWindow().getDecorView().getRootView(); 
     v1.setDrawingCacheEnabled(true); 
     Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
     v1.setDrawingCacheEnabled(false); 

     //File imageFile = new File(mPath); 

     FileOutputStream outputStream = new FileOutputStream(file); 
     int quality = 100; 
     bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream); 
     outputStream.flush(); 
     outputStream.close(); 

     MediaScannerConnection.scanFile(this, 
       new String[] { file.toString() }, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        public void onScanCompleted(String path, Uri uri) { 
         Log.e("ExternalStorage", "Scanned " + path + ":"); 
         Log.e("ExternalStorage", "-> uri=" + uri); 
        } 
       }); 


    } catch (Throwable e) { 
     Log.e("Error", "Exception on TakeScreenshot", e); 
    } 
} 

Danke nochmal Rotwang.

+0

Gern geschehen. –