2

バックグラウンドで実行されているサービスからスクリーンショットを撮る必要があります。スクリーンショットは、私のアプリでなくても、フォアグラウンドのアプリのものである可能性があります。そのため、DrawingCacheを使用できません。私は周りを検索してこれを見つけました

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0"); InputStream is = process.getInputStream();

しかし、私はストリームをどうするかわかりません。それをビットマップにするにはどうすればよいですか?ファイルに保存する必要はありません。変数に保存するだけです。これは根ざした電話用です。

どんな助けでも大歓迎です。

4

2 に答える 2

6

まあ、私はこれで一人でいるようです。これまでのところ、同様の問題を抱えている人のために、これが私が見つけたものです。これはバージョンによって異なり、2.3Gingerbreadを実行していることに注意してください。

/system/bin-screencapとで2つのファイルが見つかりましscreenshotた。

screencapデコード方法がわからない形式でビットマップを返し、screenshotSDカードのルートにtmpshot.bmpという通常のbmpファイルを作成します(どちらもコマンドパラメータを受け入れません。-hを受け入れないようです。 -help、-helpなど)。

tmpshot.bmpは今のところ実行可能な解決策のようですが、これはかなりのボトルネックであるため、SDカードからの書き込みと読み取りを避けようとしていました。私は検索を続けますが、今解決策が必要な人のために、ここにいます。

編集:さらに試してscreencapみると、別のROM(具体的にはMIUI)からのバイナリが実際にいくつかのオプションを提供していることがわかりました。ここで、(miui)screencap -t png /sdcard/screen.pngは有効なpngスクリーンショットを生成します。

于 2012-07-28T18:11:12.650 に答える
2

これを試して

 Process sh = Runtime.getRuntime().exec("su", null,null);    
                    OutputStream  os = sh.getOutputStream();
                    os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII"));
                    os.flush();          
                    os.close();
                    sh.waitFor();

トライキャッチブロックに入れて

于 2013-03-04T12:26:38.180 に答える