アプリケーションがインストールされ、200ミリ秒ごとにバックグラウンドで実行され、自分のコンピュータに画像が保存されると、Androidデバイスまたはエミュレータのスクリーンショットをプログラムで実行する必要があります。私は以下のコードを使ってこの手順を実装し、アプリケーションがフォアグラウンドにあるときにのみ動作します。アプリケーションがバックグラウンドにあるときにスクリーンショットを撮りたい以下は私のコードです:Android - プログラムでスクリーンショットを撮る方法
public static Bitmap takeScreenshot(Activity activity, int ResourceID) {
Random r = new Random();
int iterator=r.nextInt();
String mPath = Environment.getExternalStorageDirectory().toString() + "/screenshots/";
View v1 = activity.getWindow().getDecorView().findViewById(ResourceID);
v1.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
v1.layout(0, 0, v1.getMeasuredWidth(), v1.getMeasuredHeight());
v1.setDrawingCacheEnabled(true);
final Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
Bitmap resultBitmap = Bitmap.createScaledBitmap(bitmap, 640, 480, false);
v1.setDrawingCacheEnabled(false);
File imageFile = new File(mPath);
imageFile.mkdirs();
imageFile = new File(imageFile+"/"+iterator+"_screenshot.png");
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
resultBitmap.compress(CompressFormat.PNG, 100, bos);
byte[] bitmapdata = bos.toByteArray();
//write the bytes in file
FileOutputStream fos = new FileOutputStream(imageFile);
fos.write(bitmapdata);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
どのように私は、最新の情報に更新の機能を実装することができますし、プログラムDevices -> DDMS
にScreencaptureのボタンを保存しますか?それを達成することはできますか?
の許可を追加します。これを行うアプリは、深刻なセキュリティ問題を引き起こします。 –
**これは、電話機がルートされている(* kitkat *)**以外の場合は実行できません。 「重大な安全保障上の懸念」に関しては、他のどこかで深刻な安全保障上の問題があると私は思う。アプリがスクリーンショットを取得する権限を要求できるかどうかは重要なことではありません。 –
これはスクリーンショットではありません。それは200msごとのスクリーンショットです。本質的に5FPSビデオ。これは簡単に電話で行われたすべてをキャプチャします。自分の使い方(アプリのビデオを作る)ではなく、サードパーティのアプリにスクリーンショットを撮る許可を与えることは、長いウサギの穴になることになると主張している。 –