본문 바로가기
코딩하기/android studio

(android studio) 스크린샷 설정하기 (Screenshot)

by 치즈도넛 2021. 4. 2.
반응형

어플에 스크린샷 기능을 넣으려고 하니

제가 원하는 기능에 대한 정보가 많이 없더라고요

 

그래서 긁어모아 어떻게든 구현해보았습니다.

 

제가 원하는 기능은

버튼을 누르면 전체 스크린샷이 갤러리에 저장되는 것 입니다.

 


AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xxxx.xxxxxxxxx">
    
    //갤러리에 들어가기 위해 필요한 부분
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
    <application>
    ...
    </application>
</manifest>

우선 Manifest에 두줄을 추가해줍니다.

** 접근권한을 위해 꼭 필요한 부분입니다.

 

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    
     <ImageButton
            android:id="@+id/down"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center"
            android:layout_marginBottom="30dp"
            android:onClick="ScreenshotButton"
            />
    
</LinearLayout>

xml에 버튼을 추가해 줍니다.

 

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

ImageButton down;

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
     // permission 부분(접근 권한)
     verifyStoragePermission(this);
     StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
     StrictMode.setVmPolicy(builder.build());
        
     down = findViewById(R.id.down);
   }
     
      public void ScreenshotButton(View view) {
       
        View rootView = getWindow().getDecorView();  //전체화면 부분

        File screenShot = ScreenShot(rootView);
        if (screenShot != null) {
            //갤러리에 추가합니다
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(screenShot)));
        }
        down.setVisibility(View.VISIBLE);
        Toast.makeText(getApplicationContext(),"갤러리에 저장되었습니다.",Toast.LENGTH_SHORT).show();
    }

    //화면 캡쳐하기
    public File ScreenShot(View view){
        down.setVisibility(View.INVISIBLE);
        
        view.setDrawingCacheEnabled(true);

        Bitmap screenBitmap = view.getDrawingCache(); //비트맵으로 변환

        String filename = "screenshot"+System.currentTimeMillis()+".png";
        File file = new File(Environment.getExternalStorageDirectory()+"/Pictures", filename);
        FileOutputStream os = null;
        try{
            os = new FileOutputStream(file);
            screenBitmap.compress(Bitmap.CompressFormat.PNG, 90, os); //비트맵 > PNG파일
            os.close();
        }catch (IOException e){
            e.printStackTrace();
            return null;
        }

        view.setDrawingCacheEnabled(false);
        return file;
    }

    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSION_STORAGE = {
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE
    };

    public static void verifyStoragePermission(Activity activity) {
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(activity,
                    PERMISSION_STORAGE,
                    REQUEST_EXTERNAL_STORAGE);
        }
    }     
}

저는 캡쳐할 때 버튼이 보이는게 안예뻐서(?) setVisibility을 이용하였습니다.

캡쳐할 때는 버튼이 안보이게 했다가 > 저장이 끝난 뒤 버튼이 다시 보이도록 했습니다

 

 

 

 

이걸 활용한 어플을 만들었는데(안드로이드용)

 

냥술사 - 오늘의 해답/명언

play.google.com/store/apps/details?id=com.fortune.catfortuneteller

 

이 어플에는 추가로 랜덤으로 글 넣기 코드가 포함되어있습니다.

그 코드는 하단에 있는 글로 넘어가면 볼 수 있습니다.

2021.04.02 - [코딩하기/android studio] - (android studio) 랜덤으로 글 나오게 하기(random Text)

 

(android studio) 랜덤으로 글 나오게 하기(random Text)

뽑기처럼 랜덤으로 글이 나오도록 짜보고 싶어 서치하다 알아냈습니다 생각보다 어렵지 않더라고요. 우선 res > values > strings 에 들어갑니다. string.xml 안녕하세요 여기는 치즈도넛 블로그 입니다

cheese-donut.tistory.com

 

 


모두 즐겁게 코딩하세요~

반응형

댓글