2011-07-20 13 views
13

Zastanawiam się, czy istnieje sposób, aby wykryć za pomocą jakiejś metody wywołania zwrotnego "onXXXXX" lub odebranej transmisji, jeśli jakiś inny proces ma zamiar zrobić zrzut ekranu z mojej aplikacji. Na przykład, jeśli narzędzia SDK lub inna aplikacja do przechwytywania ekranu wykonuje "Zrzut ekranu", chciałbym otrzymać powiadomienie, a następnie zdecydować, czy powinienem zezwolić na zrzut ekranu, czy go zabronić.zapobiec przechwytywaniu ekranu w aplikacjach na Androida

Jeśli nie jest to możliwe, czy istnieje sposób zablokowania wyświetlacza, aby żaden inny proces nie mógł przechwycić ekranu?

Odpowiedz

5

Istnieje no supported method, aby zrobić zrzut ekranu innej aplikacji na Androida. Jedynym sposobem jest wykorzenienie lub używanie SDK, które nie dają żadnej szansy na zablokowanie lub otrzymanie powiadomienia o tym. Jeśli inna aplikacja pobiera zrzut ekranu, domyślnie korzysta z nieobsługiwanych metod i prawdopodobnie robi to, co chce.

Chciałbym wyjaśnić, że nie sugeruję, że nie należy stosować żadnych dostępnych metod zabezpieczania aplikacji. Po prostu informuję, że prawdopodobnie nie można tego zrobić bez użycia nieobsługiwanych metod i nawet jeśli z nich korzystasz, możesz nie być w 100% bezpieczny przed zrzutami ekranu.

+0

Właściwie początek takich możliwości występuje w oficjalnych źródłach i można go używać na wielu urządzeniach dostawców za pomocą aplikacji innych niż root. –

+0

Nadal nie są one oficjalne, dopóki nie znajdą się w dokumentacji interfejsu API. Po prostu mówię, że ponieważ jakakolwiek metoda wykonania zrzutu ekranu jest obecnie albo nieobsługiwana, albo bezpośrednio z SDK, najprawdopodobniej nie ma oficjalnych metod interakcji z nią. –

+0

Co z 'View.getDrawingCache (boolean autoScale)'? Dokument czyta: Zwraca mapę bitową, w której ten rysunek jest zapisany w pamięci podręcznej._ – iDroid

18

ten pracował dla mnie na Samsung Tab 2 7"

Korzystanie the following approach, po prostu dodaj FLAG_SECURE do flag okienne

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

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

    setContentView(R.layout.main); 
    } 
} 

z zastrzeżeniem, że może trzeba zmienić

LayoutParams 

na

WindowManager.LayoutParams 
+0

To działa i powinno być odpowiedzią dla większości programistów. –

+0

nie działa w wersji 7.0 w trybie krajobrazu .. –

Powiązane problemy