2014-04-12 8 views
0

계속 오류가 발생합니다.
에뮬레이터에서 코드를 실행할 때마다 디렉토리가 생성 된 '토스트'가 표시되지만 코드 줄 바로 뒤에 오류가 있어야합니다. 이 때 나타나는 오류는 다음과 같습니다에뮬레이터 (일식)에서 sdcard로 스크린 샷을 인쇄 할 수 없습니다.

"/storage/sdcard/Pictures/screenshot.png : ENOENT (해당 파일 또는 디렉토리) : 실패 열지"나는 장소를 아래 관련 코드가

합니다.

<manifest 
    <uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="19" 
    /> 
    <uses-permission 
     android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
     android:maxSdkVersion="18" 
    /> 
</manifest> 

public class myActivity { 

private void openScreenPrint() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)){ 
     View v1 = findViewById(R.id.myRelativeLayout).getRootView(); 
     v1.setDrawingCacheEnabled(true); 
     Bitmap myBM = Bitmap.createBitmap(v1.getDrawingCache()); 
     saveBitmap(myBM); 
     v1.setDrawingCacheEnabled(false); 
    } 
    else{ 
     Toast.makeText(this, "No Permission to Write", Toast.LENGTH_SHORT).show(); 
    } 
} 
public void saveBitmap(Bitmap bitmap) { 
    FileOutputStream fos = null; 
    String filePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); 
    File dir = new File(filePath); 
    if (!dir.exists()){ 
     dir.mkdirs(); 
     Toast.makeText(this, "created", Toast.LENGTH_LONG).show(); //This line shown every time 
    } 
    String fileName = "screenshot" + ".png"; 
    File imagePath = new File(filePath, fileName); 
    try { 
     fos = new FileOutputStream(imagePath); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     //Log.e("Err", e.getMessage(), e); 
    } catch (IOException e) { 
     //Log.e("Err", e.getMessage(), e); 
    } 
} 
} 

답변

0

AVD에 SD 카드를 만들었습니까? 그렇지 않은 경우 여기에 가상 장치를 생성/편집 할 때 사용하려는 항목이 있습니다. enter image description here

+0

네, 표시된이 위치에 100 MiB를 추가했습니다. 오류를 변경하지 않은 것 같습니다. – user3527696

+0

AVD가 실행중인 API는 무엇입니까? – scottt

+0

대상 : Android 4.4.2-API 수준 19 – user3527696

0

실제로 디렉토리가 실제로 생성되고 있는지 알 수 없습니다. 디렉토리 생성이 성공했는지 여부와 관계없이 Toast를 만들고 있습니다. 이 섹션을 변경해야합니다 :

if (!dir.exists()){ 
    dir.mkdirs(); 
    Toast.makeText(this, "created", Toast.LENGTH_LONG).show(); 
} 

디렉토리가 실제로 성공적으로 작성되었는지 테스트하십시오. File.mkdirs()는 부울을 반환합니다.

if (!dir.exists()) { 
    Toast.makeText(this, "dir not exists. attempting to create...", Toast.LENGTH_SHORT).show(); 
    if (dir.mkdirs()) { 
     Toast.makeText(this, "dir created", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "dir creation failed", Toast.LENGTH_SHORT).show(); 
    } 
} 
+1

외부 검사는'dir.exists()'에 대한 것이므로 여기에서 다루고 있습니다. 그러나 다른 사람들을 지적하는 좋은 것. – indivisible

관련 문제