2. Android 输入

  本节中,我们将介绍Android应用不同类型的输入,以及它们是如何以事件的形式展示给用户看。

A. 用户触摸屏操作

  智能手机应用程序的区别有部分是用户通过触摸屏进行的操作引起的不同表现。我们简要描述几个常见的:

  按下-释放(点击):主要的输入是简单的按压,也就是用户轻敲屏幕并快速的放开,例如:点击一个按钮或点击屏幕上的键盘进行输入文本
  按下-保持(按住):按住是由用户点击屏幕上的一个区域,然后在同一个位置保持一定的时间。这个动作可以用来访问二级菜单或隐藏的选项。
  滑动:滑动的操作是用户按下屏幕,然后保持住,一直从位置(x1,y1)移动到一个新的位置(x2,y2),最后放开。很多应用都有用到滑动这个操作。例如在Web浏览器页面滚动文本,或者在愤怒的小鸟游戏中,打小鸟。
  双指缩放:多点触控手势包括通过多个接触点,按压触摸屏,如使用2个或2个以上手指。最常见的多点触控用法是放大和缩小。一般一些应用程序如果支持这种手势的话,他们通常会用于改变当前查看内容的放大级别。例如在谷歌地图中,用于使用放大或缩小来改变查看地图详情的级别。
  上面列出的四个用户操作,有三个被认为是手势:按住、滑动、双指缩放。简单的来说,手势需要一大群潜在的触屏事件来实现他们的感知功能。如第七节中描述,用户点击的操作需要事件的集群则比较少,目前已经可以使用一些方法进行成功的回放。如图1所示,应用程序运行中,频繁的使用触摸屏手势;这些结果是基于同一个用户玩一款应用软件5分钟来统计的。从中可以观察到:这个会话期间,大多数的应用(86个应用中有60个)已经涉及了20到100个手势。只有2个应用是不包含任何的手势(免费的Uno小游戏和手电筒)。
  除了触摸屏,用户可以通过手机上的物理按键提供输入。我们的测试设备没有物理键盘,但它们有几个不同用途的按钮,如锁屏,关机、调节音量大小等。

B.物理传感器

  Android设备通常有若干个传感器,用于产生异步输入。传感器数据产生是硬件检测到手机物理属性的变化。我们将描述Android应用程序中最常见的传感器及其用途。需要注意的是,GPS定位是一个服务,而不是直接从设备的传感器读取的,所以目前我们无法回放它的事件。
  加速度传感器允许应用程序来检测手机是否已经改变了它的速度,还可以用来检测手机是否倾斜和旋转。这是用来改变屏幕从纵向布局为横向布局的机制,同时一些游戏使用这个加速度传感器作为用户输入的主要手段。如通过左右滚动球过迷宫或者摇晃魔法八球( magic eight ball:一种游戏)。
  近距离传感器或光传感器允许应用程序检测用户与电话间的距离。这个传感器主要用于通话过程中,当屏幕变暗,用户靠近电话时,不小心按到其他的按钮。
  指南针指示手机相对于磁北的方向。指南针通常用于地图或导航应用程序,提供方向的角度。

C. Android事件

  Android 软件栈是由一个定制的Linux内核、库、Dalvik虚拟机(VM)和运行在虚拟机上的程序组成。当用户使用一个Android应用进行交互时,Android设备的传感器产生并发送事件到内核,并将信息存在dev/input/event* 目录中的设备文件中。这些记录的事件有一个标准,5个基层格式(时间戳:设备:类型代码值),其中时间戳表示最后一次系统重新启动后到现在经过的时间,设备是事件的命名(如event 4),剩下的字段取决于特定的事件类型。
  在上述格式中,触摸屏手势被编码作为触摸屏事件流,但并没有标记其要执行哪些动作。例如,一个这样的事件可能看起来如下:


40-719451: /dev/input/event4: 0003 0035 0000011f

  这里的时间戳显示事件产生是40秒,系统重启到事件生成的时间为719451微秒; 输入的设备相对于触摸屏(我们的设备)是event4。接下来的三列提供了位置信息:0035是事件对应的x位置和0000011f(十六进制)对应于屏幕的坐标287(十进制)。然而,对高级别的手势而言,不仅仅只有这样一个单一的信息量。例如,单次点击通常需要大约18个触摸屏事件,而滑动的操作大约需要50个触摸屏事件。



图2 滑动操作的一系列事件:Xi,Yi是初始坐标;Xm,Ym是移动的坐标(仍然按住移动);Xf,Yf是最后的坐标

  图2中显示了滑动这个典型手势所包含的一个子集事件。该图的左侧显示了54个事件的原始数据流,而右侧显示高等级的语义事件集群:点击、移动、释放。前面介绍的示例事件,实际上数据流中的事件3。注意上面的时间信息,为了能成功的回放滑动操作,这54个事件必须精确的回放在179毫秒内(时间戳范围是在40-719421到40-898681)。

  举个例子,多个传感器的真实应用程序上的事件流。在图三中,展示的是GasBuddy应用程序的事件流(这个程序是在地图上显示天然气的价格),显示的数据是app操作后正常运行的前80s。



图3 Gas Buddy中事件的时序图

  x轴显示的时间,以秒为单位,y轴显示事件的数量。该图表显示事件的颗粒度是5s:顶部红色曲线,标注了触摸屏事件,而底部的淡蓝色曲线则标注了指南针的事件。上面的文本则是描述不同的执行阶段。首先,用户使用触摸板输入地理位置:洛杉矶(0~10s);可以观察到,在这个阶段并不使用指南针。接下来,应用程序会加载洛杉矶附近的加油站地图,要使用指南针来定向地图,可以观察到,用户在等待时,没有触摸屏事件(11~25s)。在第三阶段,地图加载完成,用户可以使用缩小和放大地图进行导航,此时产生了大量的触摸屏事件(26~45s),指南针仍然用来保证正确地址的定位。第四阶段,用户浏览个别加油站的天然气价格(46~60s),这个只需要进行滚动,不需要指南针。最后(61+s),用户再次使用缩小放大地图进行导航,产生触摸屏和指南针事件。
  时间序列揭示了成功进行回放的几个关键要求:事件来自于所有的传感器,不仅仅是触摸屏,这些事件都必须被采集和传送,因为它们影响应用程序的行为,同时在在高吞吐量时,这些事件也必须被采集和传送。

App name Touchscreen Proximity sensor Accelerometer
Facebook 6199 701 6
Angry Birds 5895 675 3
Gasbuddy 4723 273 15
Amazon 4831 779 4

表1. 每个输入设备运行5分钟后产生的输入事件数

  我们提供了一个典型事件流总量的定量评估表1。表1展示的是来自三个不同的事件输入设备,所列出的应用程序在运行5分钟内产生的事件总数。其中触摸事件占主导地位,但也有相当数量的时间是来自传感器。在测试执行期间,上述的应用程序所在的手机都放置在桌子上用于保持平衡,这样的话就只会有少量的加速计的事件产生。

RERAN:安卓系统的定时和点击的录制和回放——(2)相关推荐

  1. RERAN:安卓系统的定时和点击的录制和回放——(5)

    5. 回放功能   已经有无数的程序可以回放记录.在本节,我们阐述几个场景关于REMAN的记录和回放如何有利于开发者和研究人员. A. 通过轨迹回放的重复性   RERAN可以以完全相同的方式回放一组 ...

  2. RERAN:安卓系统的定时和点击的录制和回放——(4)

    4. 实现细节和性能   本节提供RERAN的细节实现和环境配置,以及评估其性能. A. 物理设备   用于开发回放工具的Android设备是摩托罗拉Droid仿生手机,双核的ARM cortex - ...

  3. h5调用安卓原生相机、相册、电话、录像,且兼容安卓系统8.0

    前言 安卓原生组件webview加载h5的URL,若要h5调用安卓原生相机和相册有效需要做以下操作. 测试机:魅蓝note2  系统5.1.1 华为荣耀畅玩7x  系统8.0.0 一.h5页面相关 方 ...

  4. 安卓嵌入H5的方式 腾讯人脸识别核身 身份验证 点击开始录制按钮 没有反应 鸿蒙系统

    一 开始使用别的手机测试身份验证都是可以正常打开相机进行录像的,使用鸿蒙2.0的手机也是可以跳转的到相机页面,自从鸿蒙手机主动拒绝过权限后,点击开始录制按钮就没有反应了,后来在重写WebChromeC ...

  5. android定时切换活动,安卓手机如何定时自动切换情景模式 (全文)

    相信很多人都知道手机情景模式这个功能.它可以根据不同场景环境而将手机调为静音或者震动模式.这个功能确确实实方便了许多人,因而也经常被使用.但是很多人希望手机能定时自动切换情景模式.安卓系统本身目前并不 ...

  6. 安装凤凰os_这些系统帮助我们实现了在PC上安装安卓系统!

    要是说在早期智能手机还不是那么的普及的时候,个人电脑应该就是我们最了解的智能设备了吧.那个时候,个人PC的上安装的操作系统就分为Windows操作系统.MAC OS操作系统.Linux 操作系统以及其 ...

  7. ubuntu 刷 android 5.0,IT之家学院:将刷了Ubuntu Touch的魅族PRO 5恢复为安卓系统

    小编写教程时用来做演示的魅族PRO 5是管总编大人借的,不把它恢复成安卓系统,这手机也没法儿还啊-- 那么这篇教程,IT之家小编就来演示如何把刷了Ubuntu Touch的魅族PRO 5恢复为安卓(国 ...

  8. 最新安卓系统细节曝光:后盖手势控制、浮雕式UI、隐私保护.....本月更新!

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 安卓还是那个可可爱爱的绿色小机器人吗? 最近,新的安卓12系统的细节被曝光,新的手势控制.隐私保护.UI界面--总有让人有种熟悉的感觉. ...

  9. 安卓x86程序安装目录_电脑上的安卓系统体验

    分享下这几天体验的在电脑上安装的安卓系统,选用了Phoenix OS v3.0.7版本安卓系统版本号为7.1.1(没有选最新版,是因为新版本有广告,而这版可以体验到纯净的系统). 1安装方法该系统的安 ...

最新文章

  1. Python字典理解
  2. WPF/Silverlight Layout 系统概述——Measure(转)
  3. 使用python3 解析html对称标签
  4. 腾讯携手2020全球C++及系统软件技术大会
  5. ajax+json字段变false,JS基础
  6. Gradle入门:简介
  7. CS190.1x Scalable Machine Learning
  8. java基础——java基本运算
  9. Kafka从上手到实践 - 庖丁解牛:Partition | 凌云时刻
  10. md5加密工具类(16位,32位,64位)
  11. vscode代码拼写错误检测插件
  12. 一学就会的虚拟化技术之hyper-v桌面虚拟化
  13. Double计算精度丢失(金融入门知识点)
  14. 巴菲特和盖茨的顶级对话:实现财富自由 没有那么难
  15. GPON网络架构简介
  16. windows搭建redis java简易访问客户端
  17. python保留n位小数,逢尾进一
  18. Aurora 数据库支持多达五个跨区域只读副本
  19. 5,10,15,20-四(五氟苯基)锰卟啉(F20TPPMnCl);齐岳生物供应四—(对甘—缬二肽苯基)卟啉(H2L)及其金属配合物MnLCl,FeLCl,CoL,NiL,CuL,ZnL
  20. emc存储设备型号_emc VNX系列存储技术参数表

热门文章

  1. 用人之道:诸葛亮VS曹操
  2. 5S管理——作战地图
  3. 【智能制造】转型企业智能工厂的思考与建设重点
  4. python怎么做软件程序_看 Python 超级程序员使用什么开发工具
  5. 管理员身份获得 SYSTEM 权限的四种方法
  6. 谈论 ModSecurity 和新的 Coraza WAF
  7. 是什么在浪费我的硬盘空间-SpaceSniffer
  8. 计算机房的标准和规定,计算机房设计规范
  9. 打灰机遇到的问题之 CCAnimation::addSpriteFrameWithFileName()
  10. 搭建Android日志系统 美团点评大前端Logan入门指南