2011-09-26 8 views
5

最近、スクリーンショットを取得しようとしていますが、すべてのものがアンドロイドエミュレータのapiレベル8で作成されています。ロビウムとプライベートメソッドを使用してアンドロイドでスクリーンショットを取ることができません

このコードでは、takeScreenShot()はディレクトリを作成し、アンドロイドとして実行している間に画像を保存することになっています。jcase 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>

関連する問題