2017-03-02 58 views
0

大家好,我會盡可能地澄清....我有一種方法,在其中我得到我的應用程序的屏幕,我真正想要的是能夠使用我的方法從其他應用程序或Android桌面獲取屏幕。我嘗試執行此操作的方式是在捕獲屏幕之前,將我的Layout變爲INVISIBLE,但如果捕獲我的應用程序完美,但我想捕捉其他應用程序,任何想法? ......我告訴你我的方法..捕獲屏幕安卓系統,但不是我的應用程序

公共無效addListenerOnButton4(){

Button btnTakeScreenshot = (Button) findViewById(R.id.share); 


    btnTakeScreenshot.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      takeScreenshot(); 
     } 
    }); 
} 
public void takeScreenshot() { 

    RelativeLayout ln = (RelativeLayout) findViewById(R.id.Layout); 
    ln.setBackgroundColor(Color.TRANSPARENT); 
    Date now = new Date(); 
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now); 

    try { 
     // image naming and path to include sd card appending name you choose for file 
     String mPath = (Environment 
       .getExternalStoragePublicDirectory(Environment 
         .DIRECTORY_DOWNLOADS) +File.separator+now+"ScreenShoot.jpg"); 


     // create bitmap screen capture 
     View v1 = getWindow().getDecorView().getRootView(); 
     v1.setDrawingCacheEnabled(true); 
     Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
     v1.setDrawingCacheEnabled(false); 

     File imageFile = new File(mPath); 

     FileOutputStream outputStream = new FileOutputStream(imageFile); 
     int quality = 100; 
     bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream); 
     outputStream.flush(); 
     outputStream.close(); 

    } catch (Throwable e) { 
     // Several error may come out with file handling or OOM 
     e.printStackTrace(); 
    } 
} 
+1

在Android 5.0+上,您可以使用媒體投影API來執行此操作。請參閱[本示例應用程序](https://github.com/commonsguy/cw-omnibus/tree/master/MediaProjection/andshooter)。在此之前,除了可能在根植設備上或通過使用開發工具,不支持其他應用程序的屏幕截圖。 – CommonsWare

回答

0

- API級別21+

您可以使用MediaProjectionManagerDetails here.

MediaProjection實施給你一個Bitmap,你可以保存爲JPEG。在得到byteArray之後,只需像在Java中一樣將它寫入文件即可。

Bitmap bmp = // your Bitmap here 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

- API前21

的Android提供了一種方式來捕捉僅View但是當你把它INVISIBLE有你View沒有顏色了。這就是爲什麼你會得到黑屏。 由於捕捉功能連接到View,所以您無法截取其他應用程序,因爲您只能將您的View隱藏。

- 任何API +根

如果你想這樣做,反正你需要root權限。然後您可以閱讀framebuffer並獲取原始數據並將其轉換爲BitmapCheck details here.

+0

感謝瓦爾的迴應,我明白我應該使用MediaProjection實際上我有一個項目,我使用MediaPoyection記錄屏幕,但我不明白如何截取屏幕截圖並將其傳遞給MediaProyection中的jpg,並檢查鏈接你通過但不是我發現任何代碼 –

+0

'MediaProjection'實現給你一個'位圖',你可以保存爲JPEG。我更新了答案。代碼運行良好。 – Val

相關問題