IT story

앱이 백그라운드로 이동할 때 Android에서 스크린 샷을 찍지 않도록하려면 어떻게합니까?

hot-time 2020. 6. 22. 07:40
반응형

앱이 백그라운드로 이동할 때 Android에서 스크린 샷을 찍지 않도록하려면 어떻게합니까?


현재 구축중인 앱에는 보안상의 이유로 백그라운드로 푸시 될 때 OS가 앱의 스크린 샷을 찍지 않도록 앱이 요구해야합니다. 이렇게하면 앱간에 전환 할 때 마지막 활성 화면을 볼 수 없습니다.

이 기능을 응용 프로그램 클래스의 onPause 메서드에 넣을 계획이지만 먼저이 기능을 달성 할 수있는 방법을 찾아야합니다.

그래서이 문제를 해결하는 단서가있는 사람이 있습니까?


시도 FLAG_SECURE:

public class FlagSecureTestActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                         WindowManager.LayoutParams.FLAG_SECURE);

    setContentView(R.layout.main);
  }
}

이는 ICS 최근 작업 기록의 수동 스크린 샷 및 자동 스크린 샷으로부터 확실히 보호됩니다. 또한 화면 녹화 (예 : 미디어 프로젝션 API를 사용하는 앱)로부터 보호합니다.

업데이트 : Now On Tap 또는 Android 6.0의 다른 비서로부터 보호합니다. 사용자가 길잡이를 불러 오면 UI의 위젯 및 컨테이너 세부 사항에 액세스 할 수 없습니다.

업데이트 # 2 : 그러나 활동의 모든 것이 보호되는 것은 아닙니다. 모든 팝업 창 - Dialog, Spinner, AutoCompleteTextView, 작업 표시 줄의 오버 플로우 등 - 안전하지 않은 것입니다. Dialog전화 getWindow()걸어 설정 하여 문제를 해결할 수 있습니다 FLAG_SECURE. 나머지는 까다로워집니다. 자세한 내용은 이 블로그 게시물참조하십시오 .


일부 장치 (예 : Samsung Galaxy ACE, 예 : GT-S5830)에서 WindowManager.LayoutParams.FLAG_SECURE 사용에주의하십시오. 이렇게하면 뷰가 스크램블됩니다. 삼성 관련 버그 인 것 같습니다. 다음을 권장합니다.

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}

스크램블 된 화면은 다음과 같습니다.

스크램블 화면 이미지

This is working properly on ICS Samsung phones though, so I'm assuming problem is isolated to Gingerbread devices (or older).


The solution provided by CommonsWare continues to be valid also in Lollipop.

Just a note, if you want to continue to not see snapshots in recent list for the entire app, ALL the implemented activities should specify in the onCreate() method the flag getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); before setContentView();

Otherwise a snapshot in the recent list will show the first activity without the flag if the user navigated through it.


다음은 앱을 백그라운드에 배치 할 때 시작 화면으로 덮어서 앱의 콘텐츠를 숨기는 솔루션입니다. 이것은 FLAG_SECURE 기술을 사용하지 않고 단순히 화면의 onPause 및 onResume 메소드를 재정의하고 뒷면의 모든 것을 포함하는 뷰를 표시하도록 뷰를 수정합니다.

https://stackoverflow.com/a/52976001/6686912

참고 URL : https://stackoverflow.com/questions/9822076/how-do-i-prevent-android-taking-a-screenshot-when-my-app-goes-to-the-background

반응형