Dev/Android

Android - Screen Capture / 스크린캡쳐 하기

healthyryu 2017. 2. 17. 17:15

안드로이드 스크린 캡쳐(스샷)







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private void takeScreenshot() {
        
        try {
            // image naming and path  to include sd card  appending name you choose for file
            // 저장할 주소 + 이름
            String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";
 
            // create bitmap screen capture
            // 화면 이미지 만들기
            View v1 = getActivity().getWindow().getDecorView().getRootView();
            v1.setDrawingCacheEnabled(true);
            Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
            v1.setDrawingCacheEnabled(false);
 
            // 이미지 파일 생성
            File imageFile = new File(mPath);
            FileOutputStream outputStream = new FileOutputStream(imageFile);
            int quality = 100;
            bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
            outputStream.flush();
            outputStream.close();
 
            openScreenshot(imageFile);
        } catch (Throwable e) {
            // Several error may come out with file handling or OOM
            e.printStackTrace();
        }
    }
cs





반드시 스크린 캡쳐를 하기 위해서 사전에 Permission 작업을 하셔야 합니다.

AndroidManifest.xml 에서 추가해주셔야 합니다.

(<application ....> 위에 만들어주시면 됩니다.)


1
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
cs



현재 화면을 얻어오기

Activity 에서 getWindow().getDecorView().getRootView() 

Flagment 에서 getActivity().getWindow().getDecorView().getRootView() 


1
2
View v1 = getActivity().getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
cs




해당 화면을 Bitmap 으로 전환하기

Bitmap.createBitmap();


1
2
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
cs




해당 Bitmap 으로 만든 이미지는 JPEG 파일 형태로 만들기

bitmap.compress(Bitmap.CompressFormat.JPEF, quality, outputStream);


1
2
3
4
5
6
File imageFile = new File(mPath);
FileOutputStream outputStream = new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
cs



이런식으로 스크린캡쳐를 하면 됩니다.


스택오버플로(stackoverflow) 참고

http://stackoverflow.com/a/5651242/3897810


구글 샘플 코드 를 참고하시면 좋습니다 :)

https://github.com/googlesamples/android-ScreenCapture




반응형