捕获活动的屏幕截图并保存在SD卡上

时间:2014-04-17 04:10:08

标签: android

我正在尝试截取活动的屏幕截图,以便在图库中看到它。但是代码不起作用,图像没有显示在gallery.I我在按钮单击事件中调用方法takePicSave()。 同样在清单文件中,有权限。

   private void takePicSave()
    {

        Bitmap bitmap = takeScreenshot();
        saveBitmap(bitmap);

    }

      public Bitmap takeScreenshot(){

        View rootview = findViewById(android.R.id.content).getRootView();
        rootview.setDrawingCacheEnabled(true);
        return rootview.getDrawingCache();

      }

      public void saveBitmap(Bitmap bitmap){

        Date date = new Date() ; 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());


          File imagePath = new File(Environment.getExternalStorageDirectory() , dateFormat.format(date) + " .png");
          FileOutputStream fos;
            try {
                fos = new FileOutputStream(imagePath);
                bitmap.compress(CompressFormat.JPEG, 100, fos);
                fos.flush();
                fos.close();
                sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://" + Environment.getExternalStorageDirectory())));


            } catch (FileNotFoundException e) {
                Log.e("Error " , e.getMessage(), e);
            } catch (IOException e) {
                Log.e("Error ", e.getMessage(), e);
            }


        }



      }

我得到的错误 “java.io.FileNotFoundException / mnt / sdcard / 2014-04-16.png(权限被拒绝)

2 个答案:

答案 0 :(得分:0)

确保您已在清单文件中添加了读写外部存储的权限。

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

答案 1 :(得分:0)

我已经完成了这个,在我的一个项目中你可以尝试下面的功能

public static Bitmap takeScreenShotOfCurrentSticky(Activity activity,View v)
    {
        View view = v;
        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();

        b = Bitmap.createBitmap(b1);
        view.destroyDrawingCache();
        System.out.println("~~~~Bitmap frm Screen shot"+b);
        return b;
    }

我已将此函数放在Application类中,因此传递活动对象和我们想拍摄屏幕的视图。您可以根据自己的要求进行更改。