Android利用反射机制调用截屏方法和获取屏幕宽高的方法
想要在应用中进行截屏,可以直接调用View的getDrawingCache方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了。
还有一个方法可以调用系统隐藏的screenshot方法,来进行截屏,这种方法截图是整屏的。
通过调用SurfaceControl.screenshot()/Surface.screenshot()截屏,在APILevel大于17使用SurfaceControl,小于等于17使用Surface,但是screenshot方法是隐藏的,因此就需要用反射来调用这个方法。
这个方法需要传入的参数就是宽和高,因此需要获取整个屏幕的宽和高。常用的有三种方法。
获取屏幕宽高
方法一
intscreenWidth=getWindowManager().getDefaultDisplay().getWidth(); intscreenHeight=getWindowManager().getDefaultDisplay().getHeight();
这个方法会提示过时了,推荐后边两种。
方法二
DisplayMetricsdm=newDisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); intscreenWidth=dm.widthPixels; intscreenHeight=dm.heightPixels;
方法三
Resourcesresources=this.getResources(); DisplayMetricsdm=resources.getDisplayMetrics(); intscreenWidth=dm.widthPixels; intscreenHeight=dm.heightPixels;
反射调用截屏方法
publicBitmapscreenshot(){ Resourcesresources=this.getResources(); DisplayMetricsdm=resources.getDisplayMetrics(); StringsurfaceClassName=""; if(Build.VERSION.SDK_INT<=17){ surfaceClassName="android.view.Surface"; }else{ surfaceClassName="android.view.SurfaceControl"; } try{ Class>c=Class.forName(surfaceClassName); Methodmethod=c.getMethod("screenshot",newClass[]{int.class,int.class}); method.setAccessible(true); return(Bitmap)method.invoke(null,dm.widthPixels,dm.heightPixels); }catch(IllegalAccessException|NoSuchMethodException|InvocationTargetException|ClassNotFoundExceptione){ e.printStackTrace(); } returnnull; }
最后返回的Bitmap对象就是截取得图像了。
需要的权限
调用截屏这个方法需要系统权限,因此没办法系统签名的应用是会报错的。
到此这篇关于Android利用反射机制调用截屏方法和获取屏幕宽高的方法的文章就介绍到这了,更多相关android反射调用截屏方法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。