Primero estoy escribiendo una aplicación raíz para que los permisos de raíz no sean un problema. He buscado y buscado y he encontrado un montón de código que nunca funcionó para mí. Es lo que he reconstruido hasta ahora y funciona. Cuando digo sorta me refiero a que hace una imagen en mi /sdcard/test.png, sin embargo, el archivo tiene 0 bytes y obviamente no se puede ver.Android tome la captura de pantalla programáticamente
public class ScreenShot extends Activity{
View content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blank);
content = findViewById(R.id.blankview);
getScreen();
}
private void getScreen(){
Bitmap bitmap = content.getDrawingCache();
File file = new File("/sdcard/test.png");
try
{
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Cualquier ayuda sobre cómo puedo tomar una captura de pantalla en el código de Android sería muy apreciada gracias!
=== === EDITAR
El siguiente es todo lo que estoy usando la imagen está tomada en mi tarjeta sd y no es 0Bytes más largos, pero toda la cosa es negro no hay nada en él. He vinculado la actividad a mi botón de búsqueda, así que cuando estoy en algún lugar de mi teléfono, presiono durante mucho tiempo la búsqueda y se supone que debe tomar una captura de pantalla, pero acabo de obtener una imagen en negro. Todo está listo transparente, de modo que lo pensaría que debería agarrar lo que está en la pantalla, pero cada vez me siento negro
Manifiesto
<activity android:name=".extras.ScreenShot"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.SEARCH_LONG_PRESS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:id="@+id/screenRoot">
</LinearLayout>
clase de pantalla
public class ScreenShot extends Activity{
View content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screenshot);
content = findViewById(R.id.screenRoot);
ViewTreeObserver vto = content.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
content.getViewTreeObserver().removeGlobalOnLayoutListener(this);
getScreen();
}
});
}
private void getScreen(){
View view = content;
View v = view.getRootView();
v.setDrawingCacheEnabled(true);
Bitmap b = v.getDrawingCache();
String extr = Environment.getExternalStorageDirectory().toString();
File myPath = new File(extr, "test.jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(myPath);
b.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finish();
}
}
k gracias por la respuesta va a echar un vistazo a su pregunta mañana muy cansados por el momento. Tengo otra pregunta, ¿cómo no se llama a root cuando hago esto? y este código solo tomará una captura de pantalla del diseño solo porque básicamente quiero tomar una captura de pantalla de lo que hay en la pantalla. Lo tengo vinculado a la tecla de búsqueda cuando presiona largamente – user577732
Ok. Funciona bien Pero si estoy usando ese código para tomar una captura de pantalla de la vista de cámara, entonces no va a funcionar. –