安卓截屏初体验

2024-05-26 17:32
文章标签 安卓 初体验 截屏

本文主要是介绍安卓截屏初体验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工作需要,需要后台服务去定时截取前台显示app的画面。百度一下,网上很多例程,以为很简单,然并卵,一路踩坑。。。

踩坑一:使用View.getDrawingCache()方法

View dView = getWindow().getDecorView();
dView.setDrawingCacheEnabled(true);
dView.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache());
if (bitmap != null) {try {// 获取内置SD卡路径String sdCardPath = Environment.getExternalStorageDirectory().getPath();// 图片文件路径String filePath = sdCardPath + File.separator + "screenshot.png";File file = new File(filePath);FileOutputStream os = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);os.flush();os.close();DebugLog.d("a7888", "存储完成");} catch (Exception e) {}
}

写了个demo,可以截屏,兴冲冲的以为搞定了,集成的时候才发现,这个只能抓取本应用的画面,失败。不过也算是学到了,通过该方法可以截取本应用的画面,或者截取指定控件的画面。

踩坑二:使用screencap -p指令

publicvoid takeScreenShot(){ String mSavedPath = Environment.getExternalStorageDirectory()+File. separator + "screenshot.png" ; 
try {           Runtime. getRuntime().exec("screencap -p " + mSavedPath); } catch (Exception e) { e.printStackTrace(); }

代码很简单,有两个注意点,一是权限,
(1). 在AndroidManifest.xml文件中添加

<uses-permissionandroid:name="android.permission.READ_FRAME_BUFFER"/>

(2). 修改APK为系统权限,将APK放到源码中编译, 修改Android.mk

LOCAL_CERTIFICATE := platform

写了个demo,可以截屏,兴冲冲的以为搞定了,结果又是想多了,截图的时间太长了,全屏截图一次需要1s+,还要再想办法。
第二点是指令中如果有一些特殊字符会导致指令运行失败,如“|”、“>>”等,需要使用以下接口:

Runtime.getRuntime().exec( new String[]{"/bin/sh","-c",cmd},null);

踩坑三:通过反射使用隐藏接口android.view.SurfaceControl.screenshot

 try {DisplayMetrics mDisplayMetrics = new DisplayMetrics();float[] dims = { mDisplayMetrics.widthPixels,mDisplayMetrics.heightPixels };Class<?> demo = null;demo = Class.forName("android.view.SurfaceControl");Method method=demo.getMethod("screenshot",new Class[]{Rect.class,int.class,int.class,int.class});Bitmap mScreenBitmap = (Bitmap) method.invoke(null,new Rect(),(int) dims[0],(int) dims[1],0);mScreenBitmap.recycle();} catch (Exception e) {e.printStackTrace();}

(1). 在AndroidManifest.xml文件中添加

<uses-permissionandroid:name="android.permission.READ_FRAME_BUFFER"/>

(2). 修改APK为系统权限,将APK放到源码中编译, 修改Android.mk

LOCAL_CERTIFICATE := platform

同样要添加权限。同样一堆坑需要注意,一通过调用SurfaceControl.screenshot() / Surface.screenshot() 截屏,在 API Level 大于 17 使用 SurfaceControl ,小于等于 17 使用 Surface。二"screenshot"还是的参数不同版本不同,当系统提示找不到这个函数的时候,去系统中找下这个文件,看下这个版本的是什么接口,文件路径/frameworks/base/core/java/android/view/SurfaceControl.java。

写了个demo,可以截屏,帧率也可以,终于搞定了‘——’

这篇关于安卓截屏初体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005120

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

安卓玩机工具------小米工具箱扩展工具 小米机型功能拓展

小米工具箱扩展版                     小米工具箱扩展版 iO_Box_Mi_Ext是由@晨钟酱开发的一款适用于小米(MIUI)、多亲(2、2Pro)、多看(多看电纸书)的多功能工具箱。该工具所有功能均可以免root实现,使用前,请打开开发者选项中的“USB调试”  功能特点 【小米工具箱】 1:冻结MIUI全家桶,隐藏状态栏图标,修改下拉通知栏图块数量;冻结

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器,按芯片来分,有以下几种: CH340PL2303CP2104FT232 一般来说,采用 CH340 芯片的适配器,性能比较稳定,价

安卓实现弹出软键盘屏幕自适应调整

今天,我通过尝试诸多方法,最终实现了软键盘弹出屏幕的自适应。      其实,一开始我想通过EditText的事件来实现,后来发现,安卓自带的函数十分强大,只需几行代码,便可实现。实现如下:     在Manifest中设置activity的属性:android:windowSoftInputMode="adjustUnspecified|stateHidden|adjustResi

Node.js初体验 Kali安装Node.js

背景:偶然看到node.js开发微信公众号的视频,有些好奇,想要接触下。然后花了两个小时在实验楼网站上在线学习了JavaScript的基础知识,以及Node.js的基础 接着本着从实践出发的原则 先去本地kali下安装个Node.js玩玩 下载地址:https://nodejs.org/en/download/ 网页最下面有提示:Note: Python 2.6 or 2.7 is requ

安卓错误经验分析之 R cannot be resolved to a variable

当出现 R cannot be resolved to a variable  错误的时候,不能采用编译器建议的修改方法,试着clean一下,然后查找gen文件夹下R.java是否丢失,如果不存在R.java,程序没有报错且采用其它方法均无效,八成是res文件夹下的layout或者manifest出现错误没有显示出来,需要自己查一遍,否则无法根本解决问题,盲目修改代码是没用的。

教你用Python快速生成各尺寸应用图标和截屏

作为独立开发者,App发布前,自然要自己制作图标、截屏,尤其是iOS,每次都要手动生成六七种尺寸的截屏,十几个尺寸的图标,尽管在Mac上有生成图标的应用,但是效果仍旧不尽如人意。 现在(其实肯定早就有人这么做了),用强大的Python就可以瞬间生成。 简单和大家说下原理。利用Python强大的文件、图像处理能力,自动缩放尺寸,生成所需图标和截屏。 有些注意点提醒下大家,截屏需要

uni-app 扫码优化:谈谈我是如何提升安卓 App 扫码准确率的

一. 前言 之前的一个项目遭到用户吐槽:“你们这个 App 扫码的正确率太低了,尤其是安卓的设备。经常性的扫码扫不出来,就算是扫出来了,也是错误的结果!” 由于之前是扫描二维码的需求,所以没有对扫描条形码做严格的测试,客户提示说是条形码扫描效率低下。随即,我用自己的手机测试了一下,在安卓手机上确实有这样的问题,扫码准确率确实是低,尤其是条形码,扫码效率慢且不准确。扫描二维码的的效率还算可以

安卓金币字符串转换成三位一个逗号的格式

DecimalFormat df1 = new DecimalFormat("###,###,###,##0.##");         return df1.format(Double.parseDouble(“ 17352208.25 ”)); 输出   17,352,208,25