Как отключить скриншоты в мобильном приложении Nativescript?

В нативное Android-приложение для отключения скриншоров нужно добавить код

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

но как использовать этот параметр безопасности в приложении NativeScript?


person Ivan Paschenko    schedule 31.01.2018    source источник


Ответы (2)


Это решение реализовано в Nativescript-Vue, пожалуйста, настройте его в соответствии с используемым вами вариантом Nativescript.

Импортируйте их:

import { isAndroid, isIOS, device, screen} from "tns-core-modules/platform";
const app = require("tns-core-modules/application");

Добавьте функцию pageLoad для выполнения кода при загрузке страницы:

<Page @loaded="pageLoad">

Запустите этот код:

pageLoad: function() {
    if (isAndroid) {
      if (app.android && device.sdkVersion >= '21') {
        const window = app.android.startActivity.getWindow();
        window.setFlags(android.view.WindowManager.LayoutParams.FLAG_SECURE,
                     android.view.WindowManager.LayoutParams.FLAG_SECURE);
      }
    }
}

Лично проверено мной, в основном импортируйте переменные и запускайте приведенный выше код при загрузке страницы или на созданной странице.

Это мой первый ответ на StackOverflow :)

person Norsky    schedule 01.04.2020

Во-первых, поскольку вы собираетесь работать с собственным кодом, я настоятельно рекомендую установить tns-platform-declarations. это очень поможет в этом процессе.

после того, как у вас есть эта настройка

После того, как вы установили и настроили его для Android.

import { topmost } from 'ui/frame';

если вы не добавите объявления платформы tns, иначе вы можете пропустить это.

declare const android: any;

затем поместите этот код, где это необходимо

//run this code if only in android application.
if(topmost().android){
    topmost().android.activity.getWindow().setFlags(android.view.WindowManager.LayoutParams.FLAG_SECURE,android.view.WindowManager.LayoutParams.FLAG_SECURE);
}

Я не запускал это лично, поэтому я не уверен на 100%, что это сработает, если это не так, то, по крайней мере, вы должны пройти большую часть пути.

person JoshSommer    schedule 31.01.2018
comment
Привет, ребята, я добавил следующий код в конструктор appcomponent.ts. Но все же я вижу экран приложения, видимый в фоновых приложениях. Пожалуйста, посоветуйте, где я должен использовать этот код? app.android.startActivity.getWindow().setFlags(android.view.WindowManager.LayoutParams.FLAG_SECURE, android.view.WindowManager.LayoutParams.FLAG_SECURE); - person smartsanja; 23.04.2018