내 응용 프로그램을 설치하고 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마다 스크린 샷입니다. 본질적으로 5 FPS 비디오. 이렇게하면 휴대 전화로 완료된 모든 것을 쉽게 포착 할 수 있습니다. 제 자신의 사용 (앱의 비디오 제작)을 위해 그것을하는 것에 반대하지 않고 제 3 자 앱에게 스크린 샷을 찍을 수있는 권한을주는 것은 긴 토끼 구멍이 될 것입니다. –