Spróbuj 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);
}
}
To zdecydowanie zabezpiecza przed ręcznymi zrzutami ekranu i automatycznymi zrzutami ekranu z historii ostatnich zadań ICS. Zabezpiecza również przed nagrywaniem ekranu (np. Aplikacje korzystające z interfejsów API projekcji multimediów).
UPDATE : zabezpiecza również przed Now On Tap lub innymi asystentami w systemie Android 6.0; nie uzyskają dostępu do szczegółów widżetów i kontenerów w Twoim interfejsie użytkownika, jeśli użytkownik wywoła asystenta.
AKTUALIZACJA # 2 : jednak nie wszystko w działaniu będzie chronione. Jakiekolwiek okna pop-up - Dialog
, Spinner
, AutoCompleteTextView
, akcja bar przelewowy, itp - będzie niepewny. Możesz rozwiązać Dialog
problem, dzwoniąc getWindow()
do niego i ustawiając FLAG_SECURE
. Reszta ... staje się trudna. Więcej informacji znajdziesz w tym poście na blogu .
FLAG_SECURE
istnieje od początku - do niedawna miało ograniczone znaczenie.FLAG_SECURE
nie obroni się przed tym, ponieważ jest to zbyt niski poziom. Podobnie, jeśli wziąłeś własną hierarchię widżetów iBitmap
miałeś ją przyciągnąć do -back-backCanvas
,FLAG_SECURE
prawdopodobnie nie będziesz się przed tym bronił, ponieważ robisz własne zrzuty ekranu swoich własnych widżetów i dlatego prawdopodobnie chciałeś mieć tam „bezpieczne”.FLAG_SECURE
dotyczy zrzutów ekranu systemu , takich jak miniatury ostatnich zadań.Uważaj przy korzystaniu z WindowManager.LayoutParams.FLAG_SECURE, na niektórych urządzeniach (zweryfikowanych na Samsung Galaxy ACE, np. GT-S5830) spowoduje to zakodowanie widoku. Wygląda na konkretny błąd firmy Samsung. Polecam:
Tak wygląda zakodowany ekran:
Działa to jednak poprawnie na telefonach ICS Samsung, więc zakładam, że problem dotyczy urządzeń Gingerbread (lub starszych).
źródło
Rozwiązanie dostarczone przez CommonsWare nadal działa również w Lollipop.
Uwaga, jeśli nadal chcesz nie widzieć migawek na najnowszej liście dla całej aplikacji, WSZYSTKIE zaimplementowane działania powinny określać w
onCreate()
metodzie flagęgetWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
przedsetContentView();
W przeciwnym razie migawka na ostatnio wyświetlanej liście pokaże pierwsze działanie bez flagi, jeśli użytkownik nawigował po niej.
źródło
Oto rozwiązanie umożliwiające ukrycie zawartości aplikacji poprzez zakrycie jej ekranem powitalnym, gdy aplikacja jest umieszczona w tle. To nie jest technika FLAG_SECURE, po prostu nadpisuję metody onPause i onResume ekranów i modyfikuję widok, aby pokazywał taki, który obejmuje wszystko z tyłu.
https://stackoverflow.com/a/52976001/6686912
źródło
to zadziałało dla mnie, zapobiega robieniu zrzutu ekranu, a także każdej wbudowanej lub innej aplikacji do nagrywania z ekranu nagrywania.
źródło
To działa dla mnie po dodaniu tych linii do onCreate przed setContentView każdego działania.
źródło