当前活动屏幕截图并在操作栏中与共享图标共享

时间:2016-07-25 13:41:24

标签: android android-activity screenshot

我想获取当前活动截图并在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();
    }
}

1 个答案:

答案 0 :(得分:0)

以下代码允许我的屏幕截图存储在SD卡上,以后用于满足您的任何需求:

首先,添加适当的权限以保存文件:

\public\images

这是代码(在Activity中运行):

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

检查此答案https://stackoverflow.com/a/5651242/4342876