2017-07-16 14 views
0

を記述することなく、Javaでそれを取得し、私は1つがテイクスクリーンショットやファイル

$ adb shell screencap -p /mnt/sdcard/sc.png 
$ adb pull /mnt/sdcard/sc.png 

とADB経由でAndroidデバイスからのスクリーンショットを取ることができることを知っているが、これはお使いの携帯電話上とあなたのPC上のファイルを書き込み私は避けたいものです。

私は次のような問題を発見しました。答えは、ファイルを指定しないとイメージがStd出力に出力されることを示唆しました。 これをコンソールからテストしたところ、バイナリデータが実際にコンソールに出力されました。

Android: It there a way to read screenshot from memory without saving to internal/external storage?

今私は、この技術を利用し、Javaからプロセスを開始し、

adb shell screencap 

コマンドを実行し、出力を読み、出力からBufferedImageを作成したいです。

私は不幸私のコードでかなりの数の問題がある。この

ProcessBuilder pb = new ProcessBuilder("cmd"); 
Process start = pb.start(); 
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream)); 
bw.write("adb shell screencap"); 
bw.newLine(); 
bw.flush(); 
// wait some time for the process to print the image to the console 
start.waitFor(10, TimeUnit.SECONDS); 
StringBuilder sb = new StringBuilder(9000000); 
Scanner s = new Scanner(start.getInputStream()); 
while (s.hasNext()) { 
     sb.append(s.next()); 
} 
String result = sb.toString(); 

のようなものを試してみました。

  1. プログラムは、スクリーンショットを取得した後に終了しません - 私はそれが

  2. を動作するように望んでいたようにstart.waitForはかなりの仕事をしません現在、私のコードは、文字を読み、私は実際にバイト

    を読みたい場所文字/数百万バイトを読み込むときにスキャナで読み込ん

はたぶん誰かが私はそれが仕事を得ることができるような方向に私を指すことができる種類の遅いようです。 ありがとう!

+0

なぜJavaを使用して 'adb'を呼び出すのですか? –

+0

私は、その画像をさらに処理するJavaプログラムを持っています –

答えて

0


ライブラリは素晴らしい作品と間違いなく、それが簡単に私はADB経由でコマンドを実行するために作られました。

2

なぜ複雑なものなのですか?あなたがadbを呼び出し、その出力がちょうど

adb exec-out screencap -p > myimg.png 

exec-outを実行したい場合は、生データ(すなわち画像)を取得する代わりにshellの使用されています。すでにスクリーンショットを取ると、内蔵のADB経由で他のさまざまなタスクを実行するための機能を持って、私はddmlibに出くわしたいくつかのより多くの時間を検索した後

+0

OPの質問にはかなりの問題がありますが、 'java'プログラムから' adb'コマンドを実行し、出力を保存せずにキャプチャするという一般的な意図がありますファイルへのアクセスは絶対にうまくいきます。あなたが前提に同意しない場合、その議論はコメントセクションに属します。 –

+0

あなたの答えをありがとう! 私はexec-outコマンドを試して、正しく動作させるようにしました。しかし、パフォーマンスは私が期待したほど良くはなかった(〜1FPS)。 私はさらに検索し、私が使うことができるライブラリを見つけたので、すべてを手動で書く必要はありません –

関連する問題