Android调用系统截屏功能,Android 内置应用截屏方法

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

Android 中,内置应用如何更好的截屏

在开发系统应用的时候,有时候需要用到截屏,因为 View.getDrawingCache() 截不到状态栏,所以这个方案不理想

这有一个更好的方案,就是用 SurfaceControl.screenshot() / Surface.screenshot() 截屏,在 API Level 大于 17 使用 SurfaceControl ,小于等于 17 使用 Surface ,但是这个方案有诸多限制,比如

1、需要反射调用,低版本中,Surface.screenshot() 函数是 hide 的,高版本中,SurfaceControl 类是 hide 的

2、调用 screenshot() 函数需要权限

3、上面需要的权限,只对应用签名与 platform 签名一致的应用起作用

所以,非系统应用是不能用的,即使调用了也会返回 null ,这个是一个对于系统应用非常合适的截图方案,具体代码如下public Bitmap screenshot() {

DisplayMetrics metrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(metrics);

// 这里只是把两个类的写法写在一起

// 在系统中,系统版本是确定的,所以选其中一个

if (Build.VERSION.SDK_INT <= 17) {

return Surface.screenshot(metrics.widthPixels, metrics.heightPixels);

} else {

return SurfaceControl.screenshot(metrics.widthPixels, metrics.heightPixels);

}

}

当然还需要在 AndroidManifest.xml 中加入上面说的权限,否则截屏会失败的

注意,我这里为什么没有用反射,因为,标题里说了,是 Android 内置应用,就是跟随系统一起编译的,所以是可以直接调用隐藏 api 的,用这个方案截的图是包含状态栏的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值