마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

백그라운드에서 현재 디스플레이의 화면캡쳐 (adb, MediaProjection, getDecorView)

0 추천

다른 앱을 실행시켜서 메뉴를 찾아들어가서 캡쳐하는 앱을 기획하고 있습니다.

메뉴를 찾아들어가는 것은 Monkey Script를 사용하려하는데, 캡쳐방법이 마땅치 않습니다.

 

편의상 제가 제작하려는 앱을 Host,  다른 앱을 라고 칭하겠습니다.

Host가 실행되면, A앱을 실행시키고 자기자신은 백그라운드로 들어갑니다. 

그 후 Host는 몽키스크립트로 특정 좌표의 터치이벤트를 발생시켜서 A앱을 컨트롤합니다.

마지막으로 Host는 전체화면을 캡쳐하여 A앱의 화면을 받아 저장합니다.

 

질문사항의 요점은 백그라운드의 앱이 현재화면을 캡쳐할 수 있는가? 입니다.

전제조건은, (1) Host는 백그라운드에서 동작합니다. (2) PC를 사용할 환경이 아닙니다.

 

1. Host앱에서 adb command로 자기 자신에게 screencap 명령을 내리는 것이 가능한가요?

2. 백그라운드 Host앱에서 MediaProjection API를 사용해서 전체화면을 캡쳐하는 것이 가능한가요?

3. 백그라운드 Host앱의 getDecorView()가 현재 디스플레이의 화면을 캡쳐하는것이 가능한가요?

 

가능하다면 무엇이 효율적일지 알고싶습니다.

gs6rinan08 (330 포인트) 님이 2015년 2월 19일 질문

1개의 답변

0 추천
 
채택된 답변

a가 실행되어도 host 가 서비스로 동작을 하고 있고.

a가 최종(최상위) 화면에서 실행되고 있다면 host에서는 최종 화면을 캡쳐할수있지요

 

example1)
 
public Bitmap takeScreenshot() {
   View rootView = findViewById(android.R.id.content).getRootView();
   rootView.setDrawingCacheEnabled(true);
   return rootView.getDrawingCache();
}
 
 
 
 

example2)

adb shell screencap -p /sdcard/screen.png

adb pull /sdcard/screen.png

adb shell rm /sdcard/screen.png
-----------
 
                        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();
 
 
 
 
example3) 루팅폰이라면.. 재부팅도
 
Runtime.getRuntime().exec("su -c reboot");
} catch (IOException e) {

 

--------------------------------

doridori2013@nate.com

 

익명사용자 님이 2015년 2월 20일 답변
gs6rinan08님이 2015년 2월 22일 채택됨
감사합니다
감사합니다
감사합니다
감사합니다
감사합니다
...