2011-09-26 4 views
5

최근에는 스크린 샷을 얻으려고했으나 모든 것이 헛되이 안드로이드 에뮬레이터에서 api 레벨 8로 생성됩니다. 아래 코드를 언급했습니다.robotium 및 개인 방법을 사용하여 android에서 스크린 샷을 가져올 수 없습니다.

이 코드에서 takeScreenShot()은 디렉토리를 생성하고 실행하는 동안 이미지를 저장하는 것으로 가정합니다. junit testcase 결과를 100 %로 표시하지만 폴더가 생성되지 않고 스크린 샷이 저장되지 않습니다. 내 SD 카드를 사용하려면 내 전화를 뿌리 뽑아야합니까?

public class NewRobotiumTest extends ActivityInstrumentationTestCase2 { 
...... 
...... 

    // actual testcase 

    public void testRecorded() throws Exception { 
     solo.waitForActivity("com.botskool.DialogBox.DialogBox", 
       ACTIVITY_WAIT_MILLIS); 
     solo.clickOnButton("Show Alert"); 
     solo.clickOnButton("Ok"); 
     solo.clickOnButton("Show Yes/No"); 
     takeScreenShot(solo.getViews().get(0), "testRecorded_1316975601089"); 
     solo.sleep(2000); 
     solo.clickOnButton("Yes"); 
     solo.clickOnButton("Show List"); 
     solo.clickOnScreen(118f, 563f); 

    } 

    /** 
    * I have added this to the android-manifest.xml file 
    * 
    * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    * 
    */ 

    public void takeScreenShot(final View view, final String name) 
      throws Exception { 

     getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       view.setDrawingCacheEnabled(true); 
       view.buildDrawingCache(); 
       Bitmap b = view.getDrawingCache(); 
       FileOutputStream fos = null; 
       try { 
        final String path = Environment.getExternalStorageDirectory()+ "/test-screenshots/"; 
        File dir = new File("/mnt/sdcard/test-screenshots"); 
        if(!dir.mkdirs()){ 
         System.out.println("Creaet sd card failed"); 
        } 

        if (!dir.exists()) { 
         System.out.println(path); 
         dir.mkdirs(); 
        } 

        fos = new FileOutputStream(path + name + ".jpg"); 
        if (fos != null) { 
         b.compress(Bitmap.CompressFormat.JPEG, 90, fos); 
         fos.close(); 
        } 
       } catch (IOException e) { 
       } 
      } 
     }); 

    } 

} 

답변

7

주 응용 프로그램에서 SD 카드에 쓸 수있는 권한이 필요합니다. JUnit 테스트 프로젝트가 아닙니다! 프로젝트 매니페스트이 추가 : <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>