一种安卓设备截屏的方法、系统及介质与流程

文档序号:27080785发布日期:2021-10-24 12:25阅读:151来源:国知局
一种安卓设备截屏的方法、系统及介质与流程

1.本发明涉及安卓设备截屏领域,特别是涉及一种安卓设备截屏的方法、系统及介质。


背景技术:

2.目前在安卓系统开发层面上的截屏技术大致分为两类:
3.目前技术一:获取用户界面窗口最顶层的视图布局的视图缓存数据,再将视图缓存数据进行转换,然后生成安卓设备的界面截图;
4.目前技术一的缺点在于高度依赖用户的界面活动,而且在截图时无法截取状态栏、导航栏等特殊位置的图像;
5.目前技术二:依赖不同的主板厂商定制的设备界面截屏接口获取设备界面的截图;
6.目前技术二的额缺点在于高度依赖厂商提供的主板截屏接口,可能会存在截屏的实现方式不同以及与自身需求不协调的问题。


技术实现要素:

7.本发明主要解决是截屏在不同主板上存在的实现方式不同,并给截屏技术开发带来很大难度的问题。
8.为解决上述技术问题,本发明采用的一个技术方案是:提供一种安卓设备截屏的方法,包括以下步骤:
9.通过系统程序的运行环境类调用系统界面管理器;
10.通过所述系统界面管理器获取所述系统程序的意图类,根据所述意图类发送相应请求至系统,所述系统响应所述请求并生成响应数据;
11.创建所述系统程序的截图读取类的对象,通过所述响应数据、所述系统界面管理器和所述截图读取类的对象获取截屏图像,并设置所述截屏图像的参数;
12.将设置完所述参数的所述截屏图像投影至所述截图读取类的画布上进行图像渲染,得到图像帧队列;
13.通过所述系统程序的图像获取类获取所述图像帧队列中的第一图像;
14.获取所述第一图像的需求格式,并依据所述需求形式转换所述第一图像的格式。
15.优选的,所述根据所述意图类发送相应请求至系统的步骤进一步包括:
16.所述意图类调用所述系统的截屏程序;
17.依据所述截屏程序向所述系统发送意图请求。
18.优选的,所述系统响应所述请求并生成响应数据的步骤进一步包括:
19.所述系统收到所述意图请求;
20.通过执行回调程序响应所述意图请求;
21.执行完所述回调程序后生成所述响应数据。
22.优选的,创建所述系统程序的截图读取类的对象,通过所述响应数据、所述系统界面管理器和所述截图读取类的对象获取截屏图像的步骤进一步包括:
23.将所述响应数据传至所述系统界面管理器;
24.所述系统界面管理器根据所述响应数据获取所述系统程序的界面数据类的对象;
25.创建所述截图读取类的对象;
26.所述截图读取类的对象配合所述界面数据类的对象获取所述截屏图像。
27.优选的,所述设置所述截屏图像的参数的步骤进一步包括:
28.获取所述截屏图像的参数要求;
29.通过所述截图读取类的对象访问所述截屏图像的图像数据;
30.依据所述截屏图像的参数要求和所述截屏图像的图像数据设置所述截屏图像的参数。
31.优选的,所述截屏图像的参数包括:图像尺寸、图像格式以及图像最大缓存数目。
32.优选的,所述将设置完所述参数的所述截屏图像投影至所述截图读取类的画布上进行图像渲染的步骤进一步包括:
33.通过所述界面数据类创建虚显对象,并将所述画布传入所述虚显对象;
34.初始化所述虚显对象;
35.通过初始化后的所述虚显对象将所述截屏图像投影至所述画布进行渲染;
36.通过对画布上的所述截屏图像进行渲染,得到所述截屏图像的图像帧队列。
37.优选的,所述通过所述系统程序的图像获取类获取所述图像帧队列中的第一图像的步骤进一步包括:
38.通过所述图像获取类获取所述画布上所述图像帧队列中的所述第一图像;
39.关闭除所述第一图像外的所述图像帧队列中的其他图像。
40.本发明还提供一种安卓设备截屏的系统,包括:调用模块、响应请求模块、图像获取设置模块、投影渲染模块、第一图像获取模块以及图像格式转换模块;
41.所述调用模块用于通过系统程序的运行环境类调用系统界面管理器;
42.所述响应请求模块用于通过所述系统界面管理器获取所述系统程序的意图类;
43.所述响应请求模块还用于根据所述意图类发送相应请求至系统,并生成响应数据;
44.所述图像获取设置模块用于创建所述系统程序的截图读取类的对象,通过所述响应数据、所述系统界面管理器和所述截图读取类的对象获取截屏图像,并设置所述截屏图像的参数;
45.所述投影渲染模块用于将设置完所述参数的所述截屏图像投影至所述截图读取类的画布上进行图像渲染,得到图像帧队列;
46.所述第一图像获取模块用于通过所述系统程序的图像获取类获取所述图像帧队列中的第一图像;
47.所述图像格式转换模块用于获取所述第一图像的需求格式,并依据所述需求形式转换所述第一图像的格式。
48.本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现所述的一种安卓设备截屏的方法步骤。
49.本发明的有益效果是:
50.1、本发明所述的一种安卓设备截屏的方法,可以实现减少由于安卓系统代码开源带来的高度定制化而导致截屏的实现方式不同的局限性;
51.2、本发明所述的一种安卓设备截屏的系统,可以实现增强不同厂商的智能安卓设备上截屏方式的通用性,并且可以在各种场景下使用;
52.3、本发明所述的一种安卓设备截屏的介质,可以实现降低对厂商主板提供的截屏接口的依赖,并可以保证截取图像的完整性。
附图说明
53.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
54.图1是本发明实施例1所述的一种安卓设备截屏的方法流程示意图;
55.图2是本发明实施例2所述的一种安卓设备截屏的系统架构示意图。
具体实施方式
56.下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
57.需要说明的是,在本发明的描述中:
58.wfd是水框架指令;
59.api是应用程序编程接口;
60.virtualdisplay是虚拟显示器,简称虚显;
61.运行环境对应context;
62.意图类对应intent类;
63.系统界面管理器对应mediaprojectionmanager;
64.界面数据类对应mediaprojection类;
65.截图读取类对应imagereader类;
66.图像获取类对应acquirelatestimage类;
67.一种安卓设备截屏的方法、系统及介质主要主要适用于安卓系统6.0及以上的安卓智能终端设备上。
68.实施例1
69.本发明实施例提供一种安卓设备截屏的方法,请参阅图1,包括以下步骤:
70.s100、通过安卓系统截屏程序的上下文context调用mediaprojectionmanager进行截图服务;
71.上下文context即运行环境,可以理解为就是一个桥梁,context提供了调用系统资源的方法;上下文context存在于进行安卓设备截屏的代码中的activity这个类的相关程序中;
72.mediaprojectionmanager是用来管理mediaprojection截屏程序的,且mediaprojectionmanager提供的是系统级服务,用于调用截屏或者录屏等底层接口;
73.mediaprojection是安卓系统截屏程序中的一个类,用于获取屏幕上的内容数据或者记录系统的界面数据,屏幕内容数据和系统界面数据可以通过这个mediaprojection类进行输出;
74.类是提前定义好的一些规则或者说功能,我们创建的类中的对象是实体,通过对象去实现规则或者功能;
75.s200、获取intent类,向系统发送intent请求,获取系统响应并生成响应数据;
76.s201、通过使用mediaprojectionmanager获取intent类,通过获取的intent类调用安卓系统中的截屏程序向安卓系统发送截屏intent请求;
77.intent类可以启动activity,也可以启动service,还可以发起广播broadcasts,intent的中文意思是“意图,意向”,这个类用于提供信息以供对应的函数使用;
78.s202、系统收到intent请求后,通过执行回调程序对intent请求的作出响应,并获取通过执行回调程序后得到的intent数据;
79.这里所说的系统回调指的是由系统执行回调函数,这个回调函数可以是用户编写的,但是必须是由系统调用;
80.s300、获取mediaprojection对象,创建imagereader对象并设置图像参数;
81.s301、将得到的intent数据传入mediaprojectionmanager,依据得到的数据,可以使mediaprojectionmanager获取mediaprojection类中的对象;
82.大概伪代码为:mediaprojection=mediaprojectionmanager.get(intent);
83.s302、在安卓系统代码中的imagereader类中创建需要处理的对象,记为第一对象,通过第一对象可以直接访问安卓设备屏幕页面的图像数据,这些数据中包含用于屏幕渲染的surface类的相关数据,直接访问这些图像数据用于配合mediaprojection类截取安卓设备屏幕页面的图像;
84.针对这些图像设置的参数包括传入图像的尺寸、格式和图像的最大缓存数目maximages,在设置图像参数时,图像的最大缓存数目maximages最少设置为2,这样可以保证图像数据不会产生丢帧的情况;
85.s400、通过mediaprojection类创建virtualdisplay对象,即虚拟显示器对象,并将所述surface传入所述虚显对象;virtualdisplay对象初始化后,可以把安卓设备上截取的界面图像投影在surface上进行图像渲染,建议使用100ms的时间用于进行图像渲染,得到截图的图像帧队列,即surface相当于持有了屏幕上每一帧图像的数据;
86.虚显的使用场景很多,比如录屏,wfd显示等,其作用就是抓取屏幕上显示的内容;virtualdisplay抓取屏幕内容,其实现方式有很多,在api中就提供了imagereader进行读取virtualdisplay里的内容;
87.在android系统中,对view及其子类,都是画在surface上的,每个页面窗口对应一个surface;
88.s500、通过acquirelatestimage这个类中的功能从imagereader类的图像帧队列中获取最新的一帧图像,记为第一图像,同时关闭除了最新的一帧图像之外的其他图像;
89.s600、根据业务需求将第一图像转换成符合功能要求的图像格式,一般是将第一
数据转换成bitmap的数据格式,bitmap指位图,是使用像素阵列来表示的图像。
90.实施例2
91.本发明实施例还提供一种安卓设备截屏的系统,请参阅图2,包括:调用模块、响应请求模块、图像获取设置模块、投影渲染模块、第一图像获取模块以及图像格式转换模块;
92.调用模块用于通过系统程序的运行环境类调用系统界面管理器;
93.响应请求模块用于通过系统界面管理器获取系统程序的意图类;
94.响应请求模块还用于根据意图类发送相应请求至系统,并生成响应数据;
95.图像获取设置模块用于创建系统程序的截图读取类的对象,通过响应数据、系统界面管理器和截图读取类的对象获取截屏图像,并设置截屏图像的参数;
96.投影渲染模块用于将设置完参数的截屏图像投影至截图读取类的画布上进行图像渲染,得到图像帧队列;
97.第一图像获取模块用于通过系统程序的图像获取类获取图像帧队列中的第一图像;
98.图像格式转换模块用于获取第一图像的需求格式,并依据需求格式转换第一图像的格式。
99.实施例3
100.本发明还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时执行如上方法的计算机程序;
101.需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,该程序在执行时,可包括如上述各方法的实施例的流程。其中,程序的存储介质可为磁碟、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果;
102.本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
103.上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
104.以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1