2015-03-02 90 views
2

我想從我的android應用拍攝一張照片,但由於我當前的Activity中有videoView,所以我得到一張黑色圖像。我怎麼能沒有root權限?我怎樣才能調用android截圖系統?

波紋管代碼即可獲得我目前的觀點:

在我的主要活動:

saveBitmap(tackeScreenshot());

和方法使用:

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("/sdcard/image.png"); 
     FileOutputStream fos; 
     try { 
      fos = new FileOutputStream(imagePath); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
      fos.flush(); 
      fos.close(); 
     } catch (FileNotFoundException e) { 
      Functions.Log("saveBitmap", e.getMessage()); 
     } catch (IOException e) { 
      Functions.Log("saveBitmap", e.getMessage()); 
     } 
    } 
+1

參見[這個](http://stackoverflow.com/a/27454425/3531756)。 – 2015-03-02 12:35:27

+0

在'takeScreenshot()'中,你不會返回正確的類型。你應該返回一個**位圖**。但是,您返回**視圖**,而是。這不是'saveBitmap()'所期望的。 – 2015-03-02 12:48:32

回答

0

你應該做這樣的事情

// image naming and path to include sd card appending name you choose for file 
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + ACCUWX.IMAGE_APPEND; 


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

OutputStream fout = null; 
imageFile = new File(mPath); 

try { 
    fout = new FileOutputStream(imageFile); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); 
    fout.flush(); 
    fout.close(); 

} catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

然後,當你需要訪問使用這樣的事情:

Uri uri = Uri.fromFile(new File(mPath));