android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...
想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了。
还有一个方法可以调用系统隐藏的 screenshot 方法,来进行截屏,这种方法截图是整屏的。
通过调用 SurfaceControl.screenshot() / Surface.screenshot() 截屏,在 API Level 大于 17 使用 SurfaceControl ,小于等于 17 使用 Surface,但是 screenshot 方法是隐藏的,因此就需要用反射来调用这个方法。
这个方法需要传入的参数就是宽和高,因此需要获取整个屏幕的宽和高。常用的有三种方法。
获取屏幕宽高
方法一
int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
这个方法会提示过时了,推荐后边两种。
方法二
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;
方法三
Resources resources = this.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;
反射调用截屏方法
public Bitmap screenshot() {
Resources resources = this.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
String surfaceClassName = "";
if (Build.VERSION.SDK_INT <= 17) {
surfaceClassName = "android.view.Surface";
} else {
surfaceClassName = "android.view.SurfaceControl";
}
try {
Class> c = Class.forName(surfaceClassName);
Method method = c.getMethod("screenshot", new Class[]{int.class, int.class});
method.setAccessible(true);
return (Bitmap) method.invoke(null, dm.widthPixels, dm.heightPixels);
} catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
最后返回的 Bitmap 对象就是截取得图像了。
需要的权限
调用截屏这个方法需要系统权限,因此没办法系统签名的应用是会报错的。
到此这篇关于Android利用反射机制调用截屏方法和获取屏幕宽高的方法的文章就介绍到这了,更多相关android 反射调用截屏方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...相关推荐
- 获取屏幕的宽高 android,Android获取屏幕宽高的方法
1. 实现代码 private intmWidth;private intmHeight; @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)public v ...
- Android获取屏幕宽高,状态栏宽高,actionbar宽高,layout宽高,导航栏高度的方法汇总
看这个博客你可以知道 获取屏幕宽高,状态栏宽高,actionbar宽高,layout宽高,导航栏(虚拟按键栏)高度的方法 目录顺序为 代码测试的机型 状态栏高度 actionbar高度 屏幕高度 导航 ...
- Android 获取屏幕宽高的正确姿势
前言 在开发时,我们经常需要根据屏幕的宽高来进行对view的适配,无论是自定义view还是andorid自带的一些控件,比如说需要占当前屏幕高度的30%,就需要获取到屏幕的宽高,但在获取宽高时我遇到了 ...
- 关于Android获取屏幕宽高、dp、sp、px之间的转化
开发过程中,动态创建布局,或者自定义view,少不了需要获取屏幕宽高,这里的宽高指手机屏幕的分辨率,单位是px,而我们在布局文件中用到的空间宽高单位是dp,字体用的是sp. 这几个计量单位之间,是有关 ...
- android获取屏幕宽高与获取控件宽高
1.获取屏幕宽高 方法1: int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px ...
- android获取该控件在屏幕,android获取屏幕宽高与获取控件宽高(三种方法)
1.获取屏幕宽高 方法1: int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px ...
- Android常见公有方法(隐藏虚拟按键/隐藏软键盘/获取屏幕宽高等)
隐藏虚拟按键,并且全屏 使用: ScreenUtils.hideBottomUIMenu(getWindow().getDecorView()); /*** 隐藏虚拟按键,并且全屏*/public s ...
- Android获取View宽高的常见方式
背景 有时我们会有基于这样的需求,当Activity创建时,调用View.getWidth.View.getHeight().View.getMeasuredWidth() .View.getgetM ...
- Android 获取视频宽高
关于获取视频宽高 最近一次需求是上传视频,并根据上传视频的宽高展示横屏或者竖屏的video控件,最初是用MediaMetadataRetriever类来获取视频的宽高 // An highlighte ...
最新文章
- 牧小熊:Adobe Illustrator 在科研作图中的应用!
- Intellij IDEA中使用MyBatis-generator 自动生成MyBatis代码
- RabbitMQ管理台使用
- windows下安装gevent
- SharedPreferences 的使用,commit和apply两个方法的区别
- python试卷生成_小学初中高中试卷自动生成
- Solr schema编写指导
- 淘宝客CMS,公众号,小程序,淘客APP,外卖返利系统
- 昂达平板装linux系统下载,U盘启动:昂达平板用上了Ubuntu Uudgie 16.10 Linux操作系统...
- Kaggle | IEEE Fraud Detection(EDA)
- 串口uart编程——基于imx6ull
- 推荐几款实用性强的外业勘察地图软件
- win10系统恢复win7的照片查看器
- 三菱PLC基础知识 辅助继电器M
- 如何判断计算机网络的好坏,网卡怎么看坏没坏_怎么检查电脑网卡是否坏了-win7之家...
- MQTT Retained消息和 LWT
- Spring 和 JAVA 的牵绊
- 程序员进阶架构师、技术总监、CTO,需要掌握哪些核心技能
- ue5 打出安卓运行包no google play store key错误问题
- mybatis 多参数中有一个list 使用方法
热门文章
- 数据结构大总结系列之B树和R树
- 一种比较省内存的稀疏矩阵Python存储方案
- Ubuntu 搜狗输入法不能输入中文解决
- Lock与synchronized测试区别
- java字符串数组拷贝函数_java 数组的拷贝 对象数组的拷贝 System.arraycopy函数
- mysql des_mysql中DES加密解密
- java script console_JS调试之console.log()作用与用法
- 刀模图是什么意思_“吃鸡”光子公布神秘图,海岛图上有44个坐标,暗示信号值取消?...
- python识别文字并且提示_python脚本:检测字符串标识符
- 合并分支到master上