2010-09-17 10 views
10

Ich möchte eine Anwendung entwickeln, die Screenshot von Android-Bildschirm nehmen .. weiß jemand, wie es geht ..? das ist ähnlich wie koushik duttas screen shot..Aber mit root verwenden .. und hat jemand koushik dutta screenshot application das funktioniert ..? funktioniert nicht für mich .. bitte lassen Sie es mich wissen..danks im Voraus.Screen Capture in Android

Antwort

0

Ich denke, es ist unmöglich, ohne root oder das SDK, sorry.

Ich würde gerne falsch bewiesen werden.

Keine App, aber wenn Sie ein USB-Kabel haben, können Sie das Android SDK auf einem PC installieren und Screenshots vom PC mit androidscreencast erstellen, ohne das Telefon rooten zu müssen.

+0

HALLO nichola, Dank für Ihre reply..then tut u hatte jeden Arbeits Quellcode, der verwurzeltes Telefon arbeitet an .. wie der koushik Duttas Code ist nicht für mich arbeiten?. –

4

Sie können versuchen, so etwas wie dieses ist

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

Lassen Sie sagen, dass Sie auf eine Schaltfläche geklickt:

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

Danach können Sie diese beiden Methoden benötigen:

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

Sollten Sie CompressFormat.PNG anstelle von CompressFormat.JPG verwenden, da die gespeicherte Datei ein .png ist? (oder ändern Sie den Dateinamen zu .jpg) – joshaidan

+0

Dies ist nur ein einfaches Beispiel für Code. Sie können verwenden, was immer Sie wollen :) –

+2

Ich sage nur, Sie haben "screenshot.png" als Dateiname, aber mit CompressFormat.JPEG als das Komprimierungsformat. Inkonsistenz. – joshaidan

3

Verfahren view.getDrawingCache() versucht zunächst, ein zuvor zwischengespeichertes Bild abzurufen. Dies kann zu Problemen führen, wenn Sie sicherstellen möchten, dass Ihr Screenshot auf dem neuesten Stand ist. Wenn Ihr Benutzer beispielsweise auf die Schaltfläche "Screenshot" klickt, die Benutzeroberfläche ändert und dann erneut darauf klickt, ist der zweite Screenshot identisch mit dem ersten, es sei denn, Sie löschen den Cache. Ich finde das folgende Verfahren bequeme:

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; 
}