2016-07-31 4 views
-2

이 링크 (How to programmatically take a screenshot in Android?)에 따르면이 대답을 캡처하여 장치의 외부 메모리에 저장했습니다.화면 캡처 파일이 저장되지 않음

나는 모든 권한을 지우고 로그에 따라 파일이 전혀 비어 있지 않습니다. 그러나 갤러리 나 파일 탐색기에서 파일을 찾을 수 없습니다.

왜 이런 일이 발생합니까? 누군가가 나를 도와 줄 수 있습니까?

+0

해당 코드 ('String mPath = Environment.getExternalStorageDirectory(). toString() + "/"+ now + ".jpg";')에 따르면 갤러리에 저장하지 않고 ** 외부 저장. 이 메소드의 이름에 속지 마십시오. [getExternalStorageDirectory()] (https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()). –

+0

그러나 아래 코드는 캡처 한 이미지를 해당 디렉토리의 파일에 저장하는 것으로 보입니다. 그것을 그 디렉토리에 저장하지 않겠습니까? – March3April4

+0

** 외부 ** 스토리지에 저장하지 마세요. 저의 previos 코멘트에 링크 된 공식 문서를 읽어주십시오. –

답변

1

Rotwang에 관해서, 나는 문제가 무엇인지 알았다.

getExternalStorageDirectory()의 경로가 저장 될 파일의 ​​유효한 디렉토리를 반환하지 않는 것으로 나타났습니다.

내 경우에는 사용자가 갤러리를 볼 때 스크린 샷을 저장하는 것이 었습니다.

그래서 Environment.getExternalStoragePublicDirectory ( Environment.DIRECTORY_PICTURES); 대신.

그래서 화면 캡처를 저장하는 전체 코드는 다음과 같습니다.

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); 
    } 
} 

다시 고맙습니다.

+0

당신을 진심으로 환영합니다. –