Powinieneś być w stanie uruchomić tego polecenia w kodzie Java:
Runtime.getRuntime().exec("screencap -p /sdcard/screen.png");
Istnieje kilka poleceń powłoki można wykonać bez konieczności korzeń. Więc nie musisz uruchamiać "su". Nie jestem pewien, czy możesz wykonać screencap. Z pewnością potrzebujesz pozwolenia na zapis na SD_CARD w swojej aplikacji.
android.permission.WRITE_EXTERNAL_STORAGE
Ale dlaczego nie używasz interfejsu API systemu Android do tworzenia zrzutów ekranu? Aby uzyskać więcej informacji przeczytaj ten post na stackoverflow: How to programmatically take a screenshot in Android?
Androids model bezpieczeństwa bazuje na identyfikatorach użytkowników, podobnie jak Linux. Każda aplikacja otrzymuje własny identyfikator użytkownika. Tak więc Twoja aplikacja ma identyfikator użytkownika podobny do 1001. Jeśli Twój użytkownik może uruchomić polecenie, możesz, w przeciwnym razie pojawi się błąd.
EDIT:
Trzeba korzeń do robienia zrzutów ekranu lub być zastosowanie systemu. Istnieje uprawnienie READ_FRAME_BUFFER, ale można je uzyskać tylko, gdy jest się aplikacją systemową. Jest to problem związany z bezpieczeństwem, gdy aplikacja może robić zrzuty ekranu Twojego urządzenia.
Znalazłem ten interfejs API http://code.google.com/p/android-screenshot-library/, który obiecuje wykonywać zrzuty ekranu bez roota. Nie testowałem tego. Biblioteka uruchamia natywną usługę, która następnie wykonuje dla Ciebie zrzuty ekranu. Ale musisz uruchomić usługę przy każdym uruchomieniu telefonu. Otrzymuje więc uprawnienia systemowe. To nie jest bardzo wygodne ...
Wniosek: Nie ma dobry sposób do robienia zrzutów ekranu bez korzenia z kodem ...
AFAIK, brak interfejsu API do przechwytywania zrzutów ekranu. Tak więc próbuję wykonać screencap za pomocą polecenia powłoki. Ale nie mogę tego wykonać bez uprawnień roota. –
Wygląda na to. Nie ma interfejsu API, a do uruchomienia aplikacji screencap potrzebny jest root. Znalazłem tę bibliotekę http://code.google.com/p/android-screenshot-library/ z tym, że powinno być możliwe robienie zrzutów ekranu bez roota. Instaluje natywną usługę, uruchamianą podczas rozruchu przez powłokę adb. Więc jest zdolny do robienia zrzutów ekranu. – mcia
Próbowałem już wcześniej. Nie działa na systemach Android 3.x i Android 4.x, ponieważ tam został złamany framebuffer. Akceptowalnym sposobem jest teraz wywołanie komendy screencap za pomocą polecenia powłoki (w permeat root). –