2010-09-17 26 views
10

Quiero desarrollar una aplicación que tome una captura de pantalla de Android ... ¿alguien sabe cómo hacerlo ...? que es similar a la captura de pantalla de koushik duttas ... Pero sin usar root ... y ¿alguien tiene una aplicación de captura de pantalla de koushik dutta que funciona ...? no está funcionando para mí ... por favor házmelo saber ... gracias de antemano.Captura de pantalla en android

Respuesta

0

Creo que es imposible sin root o el SDK, lo siento.

Me encantaría que se demuestre que estoy equivocado.

No es una aplicación, pero si tiene un cable USB, puede instalar el Android SDK en una PC y tomar capturas de pantalla desde la PC con androidscreencast, sin tener que rootear su teléfono.

+0

HI nichola, gracias por su reply..then hacer u tenía ningún código fuente de trabajo que funciona en el teléfono .. arraigada como el código duttas Koushik no está funcionando para mí?. –

4

Usted puede intentar algo como esto

private RelativeLayout view; 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    view = (RelativeLayout)findViewById(R.id.relativeView); 

    View v1 = view.getRootView(); 

    v1.setDrawingCacheEnabled(true); 
    Bitmap bm = v1.getDrawingCache(); 
} 
19

Digamos que ha hecho clic en un botón:

findViewById(R.id.button1).setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Bitmap bitmap = takeScreenshot(); 
     saveBitmap(bitmap); 
    } 
}); 

Después de que necesita estos dos métodos:

public Bitmap takeScreenshot() { 
    View rootView = findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
    return rootView.getDrawingCache(); 
} 

public void saveBitmap(Bitmap bitmap) { 
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png"); 
    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(imagePath); 
     bitmap.compress(CompressFormat.PNG, 100, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } catch (IOException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } 
} 
+1

¿Debería usar CompressFormat.PNG en lugar de CompressFormat.JPG dado que el archivo que se está guardando es un .png? (o cambie el nombre de archivo a .jpg) – joshaidan

+0

esto es solo un ejemplo básico de código. puede usar lo que quiera :) –

+2

Solo digo que tiene "screenshot.png" como nombre de archivo, pero usa CompressFormat.JPEG como el formato de compresión. Inconsecuencia. – joshaidan

3

El método view.getDrawingCache() primero intentará recuperar una imagen previamente almacenada en caché. Esto puede causar problemas si desea garantizar que su captura de pantalla esté actualizada. Por ejemplo, si su usuario hace clic en su botón de captura de pantalla, luego cambia la interfaz de usuario y luego vuelve a hacer clic, la segunda captura de pantalla será idéntica a la primera, a menos que limpie la caché. Encuentro el siguiente método más conveniente:

public Bitmap takeScreenshot() { 
    View rootView = findViewById(android.R.id.content).getRootView(); 
    Bitmap bitmap = Bitmap.createBitmap(rootView.getWidth(), rootView.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    rootView.draw(canvas); 
    return bitmap; 
} 
Cuestiones relacionadas