Zrzut ekranu w aplikacji Android

Zrzuty ekranu w aplikacji android pomagają w promocji naszej aplikacji, ale i też w postępach naszej pracy czy w testach. W tym wpisie zobaczysz, w jaki prosty sposób wykonać zrzut ekranu w aplikacji bez dodatkowych bibliotek.

1. Rodzaje zrzutów ekranów.

Możemy wyróżnić następujące typy zrzutów ekranów:

  • Zrzut ekranu tylko aplikacji.
  • Zrzut konkretnego widoku.
  • Pełny zrzut ekranu.

2. Zrzut ekranu w aplikacji android.

Cały kod sprowadza się do:

try {
    View v1 = getWindow().getDecorView().getRootView();
    v1.setDrawingCacheEnabled(true);
    v1.buildDrawingCache(true);
    Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
    v1.setDrawingCacheEnabled(false);
} catch (Throwable e) {
    e.printStackTrace();
}

Teraz zmienną bitmap możemy zapisać do pliku lub wyświetlić. Efekt będzie następujący:Zrzut ekranu w aplikacji android
Jak widzisz nie widzimy tutaj górnej belki z powiadomieniami, godziną itp. Widać ekran tylko aplikacji.

3. Zrzut ekranu konkretnego widoku.

Możesz również wykonać zdjęcie konkretnego widoku np.: Button. W tym celu wystarczy zamienić:

View v1 = getWindow().getDecorView().getRootView();

na:

View v1 = findViewById(R.id.btnTake);

Reszta kodu bez zmian. Efekt:Zrzut widoku w aplikacji android
Może się też tak zdarzyć, że obiekt, któremu chcemy zrobić zrzut ekranu jest ukryty lub niewidoczny. Nie wystarczy tylko pobrać widok. Problem polega na tym, że szerokość i wysokość ukrytych widoków wynosi 0. Trzeba użyć metody pomiaru widoku. W tym celu zmodyfikujemy nasz kod na coś takiego:

btnHide.setDrawingCacheEnabled(true);
btnHide.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
btnHide.layout(0, 0, btnHide.getMeasuredWidth(), btnHide.getMeasuredHeight());
btnHide.buildDrawingCache(true);
bitmap = Bitmap.createBitmap(btnHide.getDrawingCache());
btnHide.setDrawingCacheEnabled(false);

4. Pełny zrzut ekranu.

Takie zdjęcie wraz z paskiem górnym możemy wykonać za pomocą Media Projection Manager. Zobacz ten artykuł aby zapoznać się ze szczegółami.

5. Blokada zrobienia zrzutu ekranu.

Zdarza się też, że nie chcemy, aby inne aplikacje zrobiły nam zdjęcie. Możemy ustawić odpowiednią flagę przed wywołaniem setContentView(). Oto kod, który ustawia odpowiednią flagę:

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

W takim przypadku dostaniemy komunikat:
Blokada zrzutu ekranu w aplikacji androidNiestety nie każda aplikacja respektuje tę flagę. Jeśli użytkownik posiada roota i tak zrobi zdjęcie. Mimo to warto czasem się zabezpieczyć, jeżeli wymaga tego aplikacja np.: do haseł.

6. Podsumowanie.

Już wiesz, w jaki prosty sposób tworzyć zrzuty ekranu w aplikacji android. Oczywiście takie zdjęcia również przydają się podczas testów automatycznych i pomoże w wyeliminowaniu wielu błędów.

Co dalej?

  • Polub stronę MYENV na Facebooku oraz śledź mnie na Twitterze
  • Zachęcam do komentowania i pisania propozycji tematów, o których chcesz przeczytać
  • Poleć ten wpis za pomocą poniższych przycisków. Będę Ci za to bardzo wdzięczny 🙂
  • Życzę Ci miłego dnia i miłego kodowania 🙂