我正在編寫一些UI測試,我需要能夠通過編程的方式讓這些測試在特定時間點對我的應用程序進行截圖。我真的不知道如何從UI測試中截取屏幕截圖,但我已經明白了這一點,並稍微修改了一些我在網上找到的用於我的目的的代碼。據我所知,截圖的代碼工作正常,然而,我似乎無法保存屏幕截圖,一旦我把它。以編程方式在Android設備上保存文件
我發現的代碼似乎使用以下步驟來保存屏幕截圖。當然,它不起作用,就像我說的那樣,但這可能是因爲我的設備是Nexus 7,根據我讀到的內容,存儲在該設備上的工作方式與在其他Android設備上的工作方式不同,儘管沒有一個我所看到的資源已經詳細報道了這種差異。
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + theFileName;
File imageFile = new File(path);
下一位是在try-catch塊中,並且此時程序會引發FileNotFound異常。
out = new FileOutputStream(imageFile);
( 「走出去」 是一個FileOutputStream)
我認爲Environment.getExternalStorageDirectory()。getAbsolutePath()不返回正確路徑或東西。我也嘗試過只是.getPath,但那也不起作用。在定義之前,我已經檢查過imageFile的文件路徑是否正確,並且它是「/ storage/emulated/0/screenname」(其中screenname是代碼中的文件名)。
我需要將屏幕截圖保存在某個設備上。只要我可以從我的計算機上訪問它,這並不重要,但是如果我可以以這種方式對其進行編碼以便我可以在任何設備上運行程序而無需重寫代碼用於確定路徑。如果這是不可能的,我希望它至少在我的Nexus 7上工作。
任何有關如何能做到這一點的建議,將不勝感激。謝謝!
編輯:清單文件
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.john.johntest.MainActivity" />
</activity>
</application>
您在清單文件中有WRITE_EXTERNAL_STORAGE權限請求嗎? – greenapps 2015-02-23 20:33:11
這樣做會使我的應用程序顯然停止運行。它開始將文件上傳到我的設備,並沒有得到任何進一步的。 – ThisIsAName12345 2015-02-23 21:10:08
將哪個文件上傳到您的設備?你在說什麼?更好地顯示使用的代碼。 – greenapps 2015-02-23 22:28:11