2016-08-12 44 views
0

我想知道如何在Robotium的AVD上截屏。我已經讀過,我必須有權限,但我已經做到了。如何在Robotium中創建屏幕截圖

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 

但我依然有錯誤在Android監視器

D/Robotium: Can't save the screenshot! Requires write permission (android.permission.WRITE_EXTERNAL_STORAGE) in AndroidManifest.xml of the application under test. 
W/System.err: java.io.FileNotFoundException: /sdcard/Screenshot/asd.jpg: open failed: EACCES (Permission denied) 

我手動創建的目錄,確保目錄存在。

我也試圖採取截圖我的磁盤

String path = "/sdcard/SS"; 
solo.getConfig().screenshotSavePath = path; 
solo.takeScreenshot("asd"); 

path = "C:/"; 
solo.getConfig().screenshotSavePath = path; 
solo.takeScreenshot("asd"); 

但錯誤依然存在的。採取截圖有什麼問題?

+0

[Android的,Robotium - 問題採取截圖]的可能的複製(http://stackoverflow.com/questions/8819542/android-robotium-issue-taking-screenshot) – piotrek1543

+0

檢查上面的鏈接 – piotrek1543

回答

0

如果您已經創建了SS DIR:

String path = Environment.getExternalStorageDirectory().getPath() + "/SS"; 
+0

它會幫助解決權限錯誤嗎? –

+0

你不能像這樣指出sdcard的根目錄:「/ sdcard」。您必須通過系統的Environment.getExternalStorageDirectory()來獲取存儲目錄,因爲不同設備上的SD卡的安裝點可能不同。 所以它可能可以幫助你解決這個權限錯誤。 – Seishin

+0

它仍然沒有工作 - 同樣的錯誤。這個代碼的路徑是/ storage/emulated/0,但它鏈接到/ sdcard/ –

0

首先,創建路徑,@Seishin說:

String path = Environment.getExternalStorageDirectory().getPath() + "/SS"; 

然後,轉到您的build.gradle文件和降級targetSdkVersion22

22更高

,我的意思是:2324,需要定義Android權限控制,這比只定義有點不同:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

閱讀:https://developer.android.com/training/permissions/index.html

這些類型的權限(運行時權限)適用於Android 6.0及更高版本,所需代碼如下所示:

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.READ_CONTACTS)) { 

     // Show an expanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.READ_CONTACTS}, 
       MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

     // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

要避免它,只需降級您的targetSdkVersion

希望這將有助於

+0

我設置了路徑,就像你說的,在我的build.gradle中只有'compileSdkVersion'和'buildToolsVersion',兩者現在都在22版本,並且根本不工作。我看到我的AndroidManifest.xml很奇怪,因爲'它說LauncherActivity無法解析。同樣在''。無論如何,採取ss並不是高優先級,但它的工作很奇怪。 –

+0

你有哪些Android版本的設備? – piotrek1543

+0

它是6.0(23API),但我也試過5.1(22API) –