2016-07-25 48 views
0

我想採取當前活動截屏並在share item上點擊分享按鈕。當我運行應用程序時,沒有任何東西會顯示爲輸出。我如何獲取當前屏幕截圖?請告訴我它的正確順序。當前活動屏幕截圖並在操作欄中與共享圖標分享

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.menu_item: 

      try{ 
       takeScreenShot(av); // av is instance of hello 
      } 
      catch (Exception e) { 
       System.out.println(e); 
      } 

      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 


public static void shoot(Activity a,String b) { 
    //savePic(takeScreenShot(a), "sdcard/xx.png"); 
    savePic(takeScreenShot(a), b); 
} 
private static Bitmap takeScreenShot(Activity activity) 
{ 
    View view = activity.getWindow().getDecorView(); 
    view.setDrawingCacheEnabled(true); 
    view.buildDrawingCache(); 
    Bitmap b1 = view.getDrawingCache(); 
    Rect frame = new Rect(); 
    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); 
    int statusBarHeight = frame.top; 
    int width = activity.getWindowManager().getDefaultDisplay().getWidth(); 
    int height = activity.getWindowManager().getDefaultDisplay().getHeight(); 

    Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight); 
    view.destroyDrawingCache(); 
    return b; 
} 
private static void savePic(Bitmap b, String strFileName) 
{ 
    FileOutputStream fos = null; 
    try 
    { 
     fos = new FileOutputStream(strFileName); 
     if (null != fos) 
     { 
      b.compress(Bitmap.CompressFormat.PNG, 90, fos); 
      fos.flush(); 
      fos.close(); 
     } 
    } 
    catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

回答

0

這裏是讓我的截圖被存儲在SD卡上,後來的各種需求使用的代碼是:

首先,添加適當的權限來保存文件:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

這是代碼(在活動中運行):

 private void takeScreenshot() { 
     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.getExternalStorageDirectory().toString() + "/" + now + ".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(); 

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

這就是你如何N打開最近生成的圖像:

private void openScreenshot(File imageFile) { 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    Uri uri = Uri.fromFile(imageFile); 
    intent.setDataAndType(uri, "image/*"); 
    startActivity(intent); 
} 

檢查這個答案https://stackoverflow.com/a/5651242/4342876

+0

謝謝你...你...響應你 –

+0

歡迎。 –