Android实现对当前界面截屏,并将截图文件存放至本地文件夹

首先需要动态申请两项权限(Android6.0后危险权限之类的都需要动态申请),在AndroidManifest.xml中静态添加

其中会报错提示

Permission is only granted to system apps,解决方案:

点击File—>Settings—>Editor—>Inspections—>搜索Using system app permission,将Error改为Waring。

解决以后再Acrivity中动态申请该权限,调用以下代码

private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {        Manifest.permission.READ_EXTERNAL_STORAGE,        Manifest.permission.WRITE_EXTERNAL_STORAGE};public static void verifyStoragePermissions(Activity activity) {    // Check if we have write permission    int permission = ActivityCompat.checkSelfPermission(activity,            Manifest.permission.WRITE_EXTERNAL_STORAGE);    if (permission != PackageManager.PERMISSION_GRANTED) {        // We don't have permission so prompt the user        ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,                REQUEST_EXTERNAL_STORAGE);    }}

然后通过创建一个ScreenShot的工具类来进行管理和操作

package com.example.administrator.screenshot.util;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Rect;import android.os.Environment;import android.util.Log;import android.view.View;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;public class ScreenShot {    // 获取指定Activity的截屏,保存到png文件    static String newFilePath;    private static Bitmap takeScreenShot(Activity activity) {        // View是你需要截图的View        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;        Log.i("TAG", "" + statusBarHeight);        // 获取屏幕长和高        int width = activity.getWindowManager().getDefaultDisplay().getWidth();        int height = activity.getWindowManager().getDefaultDisplay()                .getHeight();        // 去掉标题栏        // Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);        Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height                - statusBarHeight);        view.destroyDrawingCache();        return b;    }    // 保存到sdcard    private static void savePic(Bitmap b, String strFileName) {        FileOutputStream fos = null;        try {//判断是否存在该文件夹和文件,如果没有新建            File file = new File(strFileName);            //获取父目录            File fileParent = file.getParentFile();            //判断是否存在            if (!fileParent.exists()) {//                创建父目录文件                fileParent.mkdirs();            }            file.createNewFile();            fos = new FileOutputStream(new File(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();        }    }    //用于获取当前最新的截图    public static String getPath(){        return newFilePath;    }    // 截屏方法    public static void shoot(Activity a) {        Date date = new Date();        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        String fileName = df.format(date)+".png";        String sdCardPath = Environment.getExternalStorageDirectory().getPath();        String filePath = sdCardPath + File.separator + "xinlv" + File.separator + "Screenshoots"+ File.separator + fileName;        newFilePath = filePath;        ScreenShot.savePic(ScreenShot.takeScreenShot(a), filePath);    }}

做了一个小Demo实现了本功能,Demo地址https://github.com/18855578562/ScreenShot

更多相关文章

  1. Android(安卓)Studio 的菜单栏之 Android(安卓)Studio 与 File
  2. android 系统搜索框的使用及获取输入
  3. Android(安卓)自定义View 例子一
  4. android混淆(Obfuscate)
  5. Android知识要点整理(2)----- 应用资源
  6. 安卓缓存-LruCache介绍
  7. Android(安卓)8.0 Adaptive Icon特性 for Unity适配教程
  8. thread in android ndk
  9. android 4.0 全屏 屏蔽下面的status bar

随机推荐

  1. Android解决异常: startRecording() calle
  2. ProGuard系列 - Android(安卓)ProGuard
  3. Android调用webservice接口
  4. Android(安卓)MVP+Retrofit+dagger2+RxAn
  5. Android布局管理器介绍
  6. Android(安卓)自己收集的开源项目和文章
  7. android jni方法模拟高频按键点击
  8. Android面试题(四)——动画
  9. android setTag的妙用和The key must be
  10. Android(安卓)Camera数据流分析全程记录(o