Android 애플리케이션에서 화면 녹화를 방지 할 수 있습니까?
Android 보안 애플리케이션을 개발하고 싶습니다. 그 점에서 배경을 실행하는 화면 녹화 소프트웨어를 감지하고 죽일 필요가 있습니다. 스크린 샷을 방지하기 위해 SECURE FLAG을 사용했습니다. 그러나 Android 화면의 비디오 캡처를 방지 할 수도 있습니다. 화면 캡처 (동영상 / 스크린 샷)를 방지하는 방법을 알려주세요.
Android 애플리케이션에서 화면 녹화를 방지 할 수 있습니까?
Android 보안 애플리케이션을 개발하고 싶습니다. 그 점에서 배경을 실행하는 화면 녹화 소프트웨어를 감지하고 죽일 필요가 있습니다. 스크린 샷을 방지하기 위해 SECURE FLAG을 사용했습니다. 그러나 Android 화면의 비디오 캡처를 방지 할 수도 있습니다. 화면 캡처 (동영상 / 스크린 샷)를 방지하는 방법을 알려주세요.
답변:
지원되는 수단을 통해 안드로이드 앱의 화면 / 동영상 캡처를 완전히 막을 수 는 없다고 말씀 드리고자합니다. 그러나 일반 안드로이드 기기 에서만 차단하고 싶다면 SECURE FLAG가 상당합니다.
1) 보안 플래그는 일반 스크린 샷과 비디오 캡처를 모두 차단합니다.
또한 이 링크의 문서에 따르면
창 플래그 : 창의 콘텐츠를 안전한 것으로 취급하여 스크린 샷에 표시되거나 비보안 디스플레이에 표시되지 않도록합니다.
위의 솔루션은 응용 프로그램이 앱의 비디오를 캡처하는 것을 확실히 방지합니다.
2) 화면 내용을 캡처하는 다른 방법이 있습니다.
루팅 된 기기에서 또는 SDK를 사용하여 다른 앱의 화면을 캡처 할 수 있습니다.
둘 다 차단하거나 알림을받을 가능성이 거의 또는 전혀 없습니다.
예 : SDK를 통해 휴대폰 화면을 컴퓨터로 미러링하는 소프트웨어가 있으므로 앱에서 검색 할 수없는 화면 캡처 소프트웨어를 그곳에서 사용할 수 있습니다.
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
다음 줄을 추가하십시오.
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
setContentView()
방법 전에 .
Java 사용자의 경우이 줄을 setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
Kotlin 사용자의 경우
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
window?.set...
Dialogs에서는 Window가 있을지 알지 못하기 때문입니다.
앱에서 스크린 샷을 비활성화하는 방법을 알고있는 것으로 보이며 이에 도움이되는 다른 답변이 있습니다. 하지만 아무도 제공하지 않는 중요한 정보 를 제공하려고 노력할 것입니다.
1) 스크린 샷 (사진 / 동영상) 촬영이 100 % 안전한 앱 은 사용할 수 없습니다 . Android에서 스크린 샷을 찍는 공식적인 방법 은 없습니다 . 앱이 화면을 녹화하는 경우 지원되지 않는 방법 (루팅 또는 SDK 사용)을 사용해야합니다 .
녹화 화면에 루트 액세스를 사용하는 경우 앱을 차단할 수있는 범위가 거의 없습니다.
2) 여기에서이 문제에 대해 언급 한 사람은 없지만 WindowManager.LayoutParams.FLAG_SECURE
. 많은 장치 (예 : Samsung Galaxy ACE, 예 : GT-S5830)에서 전체보기가 뒤죽박죽임을 확인했습니다. 이렇게
이렇게 수표를 넣어주세요
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}
ICS 장치에서 완벽하게 작동하므로 문제가 없습니다.
3) 또한 Android 4.3과 같은 최신 장치에서도 화면이 회전 할 때 애니메이션 문제가 발생한다는 것을 알게되었습니다. 제발 확인 이 버그 보고서를.
앱을 기기 / 프로필 소유자로 만들고 setScreenCaptureDisabled()
. 로부터 문서 ,이 API는 다음을 수행합니다
public void setScreenCaptureDisabled (ComponentName admin, boolean disabled) API 레벨 21에 추가됨
화면 캡처 비활성화 여부를 설정하기 위해 장치 / 프로필 소유자가 호출합니다. 화면 캡처를 비활성화하면 보안 비디오 출력이없는 디스플레이 장치에 콘텐츠가 표시되지 않습니다. 보안 표면 및 보안 디스플레이에 대한 자세한 내용은 FLAG_SECURE를 참조하십시오.
호출 장치 관리자는 장치 또는 프로필 소유자 여야합니다. 그렇지 않은 경우 보안 예외가 발생합니다. 매개 변수 admin이 요청이 연관된 DeviceAdminReceiver입니다. disabled 화면 캡처의 사용 여부입니다.
또는 MDM (Mobile Device Management) 파트너 앱 이 될 수 있습니다 .OEMs는 장치 를 제어하기 위해 MDM 파트너 앱에 추가 API를 제공합니다.
현재 이것은 화면 캡처 제한을 적용 할 수있는 유일한 방법입니다.
이 시도:
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
단일 활동에만 적합한 모든 답변을 보았지만 활동에 코드를 추가하지 않고 모든 활동에 대한 스크린 샷을 차단하는 솔루션이 있습니다. 먼저 Custom Application 클래스를 만들고 registerActivityLifecycleCallbacks
. 그런 다음 매니페스트에 등록하십시오.
MyApplicationContext.class
public class MyApplicationContext extends Application {
private Context context;
public void onCreate() {
super.onCreate();
context = getApplicationContext();
setupActivityListener();
}
private void setupActivityListener() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); }
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
}
명백한
<application
android:name=".MyApplicationContext"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
이 솔루션을 사용하여 앱에서 수동 스냅 샷을 허용하고 앱이 백그라운드로 전환 될 때 화면 캡처를 허용하지 않았으므로 도움이되기를 바랍니다.
@Override
protected void onResume() {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
super.onResume();
}
@Override
protected void onPause() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
super.onPause();
}