6

uiautomatorを使用する場合、takeScreenshot(File storePath)どのパラメーターを渡しても常に false を返します。

new File(dir_name, file_name)どちらかまたは のどちらかを指定しようとしましたがnew File(file_name)、どちらも機能しません(もちろん、dir_nameが存在しない場合はmkdirが最初です)。

false を返すたびに、エミュレーターの /data/local/tmp/が空になります。

dumpWindowHierarchyところで、同様のことを試みるとそこにダンプファイルが生成される可能性があるため、これは許可の問題ではないと思います。

よろしくお願いします。

4

2 に答える 2

7

エミュレーターを使用してテストを実行している場合は、AVD 構成で [ホスト GPU を使用] をオンにする必要があります。この変更の後、それは私にとってはうまくいきました。

それでも問題が解決しない場合は、screencap を試してみてください。スクリーンショットを撮るためのコマンドラインツールです。両方のエミュレータ設定で機能します。スクリーンショットを特定のパスに保存するには、次を実行します。

Process process = Runtime.getRuntime().exec("screencap <path>");
process.waitFor();

/data/local/tmpを使用して、許可に関する問題を回避してください。SD Card dirも使用できます。非同期なのでwaitFor()で処理が終わるまで待ちます。提供されたファイルの拡張子によって、目的の出力形式を認識します。

または、InputStream で PNG を取得できます (待つ必要はありません)。

Process process = Runtime.getRuntime().exec("screencap -p");
InputStream output = new BufferedInputStream(process.getInputStream());

JPEG でファイルを取得する場合は、-p を省略できます。JPEG スクリーンショットはサイズが大きくなりますが、取得にかかる時間は短くなります。

于 2013-01-21T17:20:47.647 に答える
3

takeScreenshot() メソッドは、Android バージョン 4.2 以降のデバイスから適用できます。

デバイスのバージョンが適切な場合は、次のコードを使用します

File path = new File("/sdcard/filename.png");
    int SDK_VERSION = android.os.Build.VERSION.SDK_INT; 
    if (SDK_VERSION >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
        mUiAutomatorTestCase.getUiDevice().takeScreenshot(PATH);
    }

次のコマンドでファイルを表示できます

$ adb shell ls -l /sdcard/name-of-file
于 2013-12-20T07:13:44.317 に答える