Wiem, że istnieje wiele pytań dotyczących przechwytywania zrzutów ekranu i sprawdziłem większość z nich. Mają tę samą odpowiedź (z małymi zmianami kodu).jak zrobić zrzut ekranu?
Mam następujący sposób screenshot przechwytywania:
@NonNull
public static Bitmap takeScreenShot(Window window) throws IOException {
final View rootView = window.getDecorView().getRootView();
final boolean drawingCacheEnabled = rootView.isDrawingCacheEnabled();
rootView.setDrawingCacheEnabled(true);
try {
return Bitmap.createBitmap(rootView.getDrawingCache());
} finally {
rootView.setDrawingCacheEnabled(drawingCacheEnabled);
}
}
I można go używać, takie jak: takeScreenShot(getActivity().getWindow())
Jednak to podejście ma kilka ograniczeń:
- Jeśli masz jakieś dialogi na ekranie nie zostaną przechwycone na zrzucie ekranu .
- Czy będzie działać z przyspieszeniami sprzętowymi? Według do dokumentacji:
Kiedy akceleracja sprzętowa jest włączona, umożliwiając
rysunek cache nie ma żadnego wpływu na renderingu, ponieważ system wykorzystuje
inny mechanizm przyspieszania który ignoruje flagę - Zrzut ekranu zawiera czarne skrzynki zamiast GLviews. (np. gdy aplikacja ma mapy.). Wydaje się, że jest to wynikiem drugiego punktu.
Moje pytanie brzmi: czy istnieje jakieś rozwiązanie bez zrootowania, które może rozwiązać przynajmniej niektóre z moich problemów?
Na dzierżawy Chciałbym uchwycić dialogi –