2017-11-17 15 views
5

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ń:

  1. Jeśli masz jakieś dialogi na ekranie nie zostaną przechwycone na zrzucie ekranu .
  2. 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ę

  3. 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?

+0

Na dzierżawy Chciałbym uchwycić dialogi –

Odpowiedz

Powiązane problemy