Usted debe ser capaz de ejecutar este comando en el código de Java:
Runtime.getRuntime().exec("screencap -p /sdcard/screen.png");
Hay algunos comandos shell puede ejecutar sin tener raíz. Entonces no necesitas ejecutar "su". No estoy seguro de si puedes ejecutar el screencap. Ciertamente necesita permiso para escribir en SD_CARD en su aplicación.
android.permission.WRITE_EXTERNAL_STORAGE
¿Pero por qué no usa la API de Android para hacer su captura de pantalla? Para obtener más información, lea esta publicación en stackoverflow: How to programmatically take a screenshot in Android?
El modelo de seguridad de androides se basa en identificadores de usuario, como Linux. Cada aplicación tiene su propia identificación de usuario. Por lo tanto, su aplicación tiene un ID de usuario como 1001. Si su usuario puede ejecutar el comando, puede recibir un error.
EDIT:
Es necesario root para realizar capturas de pantalla o ser una aplicación del sistema. Hay un permiso READ_FRAME_BUFFER pero solo puede obtenerlo cuando es una aplicación del sistema. Es un problema de seguridad cuando una aplicación puede tomar capturas de pantalla de tu dispositivo.
He encontrado esta API http://code.google.com/p/android-screenshot-library/ que promete tomar capturas de pantalla sin root. No lo probé. La biblioteca inicia un servicio nativo que luego toma las capturas de pantalla por usted. Pero debe ejecutar el servicio cada vez que se enciende el teléfono. Entonces obtiene los privilegios del sistema. Eso no es muy cómodo ...
Conclusión: No hay buena manera de tomar capturas de pantalla sin raíz del código ...
AFAIK, sin API para capturar la captura de pantalla. Por lo tanto, trato de ejecutar screencap a través del comando de shell. Pero no puedo ejecutarlo sin el permiso de root. –
Parece que sí. No hay API y necesita root para ejecutar screencap. Encontré esta biblioteca http://code.google.com/p/android-screenshot-library/ con esto, debería poder tomar capturas de pantalla sin root. Instala un servicio nativo, iniciado en el arranque a través del shell adb. Entonces es capaz de tomar capturas de pantalla. – mcia
Lo he probado antes. No funciona en Android 3.xy Android 4.x ya que el framebuffer se rompió allí. La forma aceptable ahora es llamar call screencap mediante el comando de shell (bajo el permiso de root) –