描述
开 本: 32开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302468028
本书适合于Android初学者、移动开发从业者学习,也可作为培训机构及职业学院软件开发实践课的参考教材。
“
目 录
第1章 初识Android 1
1.1 Android发展史与现状 2
1.2 Android系统架构与特性 3
1.2.1 Android系统架构 3
1.2.2 Dalvik VM和JVM的区别 5
1.2.3 Android系统平台的优势 6
1.3 Android开发环境搭建 7
1.3.1 下载安装Java并配置环境变量 7
1.3.2 下载安装Android Studio和Android SDK 10
1.4 Android Studio的使用与工程目录解析 12
1.4.1 建立新的Android应用 12
1.4.2 创建模拟器并使用模拟器运行应用 14
1.4.3 工程目录分析 17
1.4.4 Android Studio常见问题 19
1.5 小结 20
第2章 界面组件Activity 21
2.1 从个工程开始 22
2.1.1 App是如何运行的 22
2.1.2 项目中的资源 24
2.1.3 理解Activity 25
2.2 Activity生命周期 27
2.2.1 Activity生命周期概述 27
2.2.2 Activity生命周期实例 29
2.3 Intent与Activity之间的跳转 33
2.3.1 Intent简介 33
2.3.2 使用Intent进行Activity跳转 34
2.4 Activity启动模式 41
2.4.1 standard模式 41
2.4.2 singleTop模式 43
2.4.3 singleTask模式 44
2.4.4 singleInstance模式 45
2.5 小结 47
第3章 用户界面UI的开发 48
3.1 布局管理器概述 49
3.2 LinearLayout:线性布局管理器 50
3.2.1 LinearLayout实例及属性详解 51
3.2.2 使用代码控制线性布局管理器 52
3.3 TableLayout:表格布局管理器 54
3.3.1 TableLayout实例与属性详解 54
3.3.2 使用代码控制表格布局管理器 56
3.4 RelativeLayout:相对布局管理器 57
3.4.1 RelativeLayout实例及属性详解 57
3.4.2 使用代码控制相对布局管理器 59
3.5 FrameLayout: 帧布局管理器 60
3.5.1 FrameLayout布局实例 60
3.5.2 使用代码控制帧布局管理器 61
3.6 AbsoluteLayout:布局管理器 62
3.7 GridLayout:网格布局管理器 63
3.7.1 GridLayout实例及属性详解 63
3.7.2 使用代码控制网格布局管理器 65
3.8 布局管理器之间互相嵌套 67
3.9 小结 69
第4章 基本控件与事件处理 70
4.1 常用基本控件的使用 71
4.1.1 基本控件的使用 71
4.1.2 Android中的尺寸问题 79
4.2 Android中的事件处理 79
4.2.1 点击事件 80
4.2.2 长按事件 83
4.2.3 触摸事件 84
4.2.4 按键事件 85
4.2.5 下拉列表的选中事件 86
4.2.6 单选按钮的改变事件 88
4.2.7 焦点事件 89
4.3 ListView的使用 90
4.3.1 使用ArrayAdapter实现ListView 90
4.3.2 使用SimpleAdapter实现ListView 92
4.3.3 继承BaseAdapter自定义Adapter来实现ListView 94
4.3.4 item的事件处理 98
4.4 小结 100
第5章 Fragment详解 101
5.1 Fragment的创建与使用 102
5.1.1 静态使用Fragment 102
5.1.2 动态使用Fragment 105
5.1.3 使用Fragment时常用的类和方法 109
5.2 Fragment生命周期 110
5.3 ListFragment的使用 116
5.4 用DialogFragment创建对话框 118
5.4.1 通过重写onCreateView方法来实现对话框 119
5.4.2 通过重写onCreateDialog方法来实现对话框 121
5.5 Fragment在开发中遇到的一些常见问题 122
5.5.1 旋转屏幕问题 122
5.5.2 Fragment返回栈 122
5.5.3 Fragment与Activity之间的数据通信 127
5.6 小结 130
第6章 更多的控件与控件开发 131
6.1 ViewPager的使用 132
6.1.1 ViewPager的使用 132
6.1.2 ViewPager与Fragment 135
6.1.3 ViewPager与TabLayout 137
6.2 RecyclerView的使用 140
6.2.1 RecyclerView的实现 140
6.2.2 item分隔线及动画效果 145
6.2.3 点击事件的实现 149
6.3 自定义View控件 151
6.3.1 自绘控件 151
6.3.2 继承控件 156
6.3.3 组合控件 162
6.4 小结 165
第7章 数据存储 166
7.1 SharedPreferences 167
7.2 文件存储 173
7.2.1 在应用私有文件夹中读写数据 173
7.2.2 向SDCard写入数据 176
7.3 SQLite数据库 177
7.3.1 SQLite简介 177
7.3.2 SQLite操作的核心类SQLiteDatabase与SQLiteOpenHelper 178
7.3.3 SQLite操作实例 184
7.4 ContentProvider 194
7.4.1 ContentProvider常用类简介 195
7.4.2 自定义ContentProvider 197
7.5 动态权限 202
7.5.1 动态权限简介 203
7.5.2 读取通话记录 204
7.6 小结 209
第8章 Service详解 210
8.1 Service综述 211
8.1.1 Service的分类 211
8.1.2 为什么不使用线程 212
8.1.3 Service的创建与启动 212
8.1.4 Service生命周期 213
8.2 Service的简单实例 214
8.2.1 以start方式创建与启动Service 215
8.2.2 以bind方式创建与绑定Service 220
8.3 Android消息处理机制 227
8.3.1 Handler机制核心类介绍 227
8.3.2 Handler机制使用实例 231
8.3.3 Handler机制与AsyncTask比较分析 235
8.4 前台服务 239
8.4.1 Notification简介与使用 240
8.4.2 前台服务使用实例 241
8.5 IntentService 245
8.6 小结 248
第9章 Android广播机制 249
9.1 广播机制概述 250
9.2 使用系统广播 251
9.2.1 动态注册广播实例 251
9.2.2 静态注册广播实例 256
9.3 自定义广播:普通广播与有序广播 257
9.3.1 普通广播实例 257
9.3.2 有序广播实例 259
9.4 使用本地广播 263
9.5 小结 265
第10章 网络开发 266
10.1 Android网络通信概述 267
10.1.1 TCP/IP 267
10.1.2 HTTP与Socket 267
10.2 使用HTTP协议进行网络通信 268
10.2.1 HttpURLConnection简介 269
10.2.2 HttpURLConnection使用实例 269
10.3 客户端类库OkHttp 277
10.3.1 OkHttp简介 277
10.3.2 OkHttp中各种请求的实现 279
10.3.3 OkHttp使用实例 284
10.3.4 JSON简介 289
10.4 使用Socket进行网络通信 291
10.4.1 Socket简介 291
10.4.2 基于TCP的Socket 292
10.5 WebView 297
10.5.1 WebView的基本使用 297
10.5.2 使用HTML进行UI设计 299
10.6 小结 303
第11章 多媒体开发 304
11.1 拨号功能与短信功能 305
11.1.1 拨号的实现 305
11.1.2 短信发送 310
11.1.3 接收短信 316
11.2 再论Notification 321
11.2.1 普通Notification回顾与拓展 321
11.2.2 折叠式Notification 325
11.2.3 悬挂式Notification 326
11.2.4 Notification的其他应用 326
11.3 动画 330
11.3.1 帧动画 330
11.3.2 补间动画 332
11.3.3 属性动画 338
11.4 相机与相册 340
11.4.1 相机的使用 340
11.4.2 相册的使用 344
11.4.3 图片的裁剪 346
11.5 媒体播放器的开发 351
11.5.1 开发一个音频播放器 351
11.5.2 开发一个视频器 359
11.6 录视频与录音频 366
11.6.1 录制音频 366
11.6.2 录制视频 371
11.7 小结 377
第12章 传感器与地理位置定位 378
12.1 传感器 379
12.1.1 传感器简介 379
12.1.2 加速度传感器 381
12.1.3 光线传感器 381
12.2 地理位置定位 385
12.2.1 LocationManager的使用 385
12.2.2 使用高德地图 389
12.3 小结 398
第13章 VR开发入门 399
13.1 详解VR 400
13.1.1 VR是什么 400
13.1.2 VR的关键技术 400
13.1.3 VR发展历程 402
13.1.4 VR在技术层面上的现状 402
13.1.5 VR当前市场现状 403
13.1.6 VR的市场前景 403
13.1.7 主流的硬件设备形态 405
13.1.8 谁会领衔VR内容制作 406
13.2 基于Unity3D的Android平台VR应用开发 406
13.2.1 下载Cardboard SDK for Unity 408
13.2.2 导入CardboardSDKForUnity.unitypackage 408
13.2.3 运行DemoScene 409
13.2.4 使用Unity3D创建一个自己的场景 412
13.3 小结 414
第14章 Android NDK开发入门 415
14.1 NDK简介 416
14.2 使用Android Studio进行NDK开发 416
14.2.1 Android NDK开发环境搭建 417
14.2.2 个NDK应用 420
14.3 小结 424
第15章 完成并发布一个产品 425
15.1 功能需求分析 426
15.2 功能开发(上) 427
15.2.1 程序概览 427
15.2.2 数据库设计与开发 427
15.2.3 用户登录验证 431
15.2.4 工具类 437
15.3 功能开发(下) 441
15.3.1 日记记录 441
15.3.2 日记查询 456
15.3.3 个人中心 465
15.3.4 AndroidManifest.xml及其他配置文件 471
15.4 将应用打包并发布到小米应用商店 474
15.4.1 应用打包 474
15.4.2 发布应用到小米应用商店 476
15.5 小结 480
期、多个Activity之间的跳转,以及Activity的4种启动模式。另外,本章还介绍Intent在Activity组件中的应用,并且讲述如何使用Log。第3章主要介绍布局管理器的作用,并介绍Android中的6种布局管理器,即LinearLayout、RelativeLayout、TableLayout、FrameLayout、AbsoluteLayout、GridLayout。所有的布局管理器既可以通过配置文件实现,也可以在Activity中用代码实现。布局管理器直接可以通过互相嵌套使用来实现更复杂的布局。第4章系统地讲解在Android开发中常用的一些控件,同时结合控件讲解Android中的事件处理,对实际开发中经常使用的控件ListView进行了重点讲解。第5章系统地讲述Fragment的使用场景、使用方法和生命周期,并将其与Activity的生命周期做比较,以便加深对Fragment的理解。同时,对ListFragment与DialogFragment这两个特殊的Fragment进行深入的讲解,对其用法和特性也都进行了分析。在本章后还根据开发中的经验向读者阐释一些Fragment使用中常见的问题。第6章非常详细地讲述ViewPager、RecyclerView这两个View控件的使用。这两个控件都是比较新的控件,在已有的Android开发书籍中很少提及,而在实际的开发过程中又经常使用,所以这里花较多篇幅对其讲解。同时,针对一些特殊情况,比如官方提供的控件无法解决的问题,如何通过自定义控件来解决也进行了讲解。第7章主要讲解数据操作的内容,系统地讲述4种数据存储的具体方式。同时,本章引入动态权限的概念,提醒读者在使用Android 6.0以上版本进行开发时,添加权限应该是动态获取,而不是静态获取。第8章讲解Service是什么、Service的分类、为什么需要使用Service以及Service的几种使用方法,同时结合Service讲解Handler机制和AsyncTask的用法。第9章阐述广播机制,并通过实例告诉读者如何使用系统广播,以及通过对普通广播和有序广播的介绍讲解如何自定义广播。另外,本章还讲述Android为了能够简单地解决广播的安全性问题而引入的一套本地广播机制——本地广播。第10章对Android中的网络通信技术进行系统的分析与总结,讲解如何使用HTTP及Socket进行网络通信,同时针对一些特殊的需要讲解WebView的使用,重点介绍OkHttp这一实际开发中经常使用的、非常重要的HTTP请求框架。第11章主要对Android系统中的各种多媒体技术进行学习,其中包括通知的使用技巧、调用摄像头拍照、从相册中选取照片、播放音频和视频文件,以及如何进行视频和音频的录制。此外,本章还介绍如何使用Android提供的API来接收、发送和拦截短信,这使得读者甚至可以编写一个自己的短信程序来替换系统的短信程序。第12章主要以传感器和地理信息技术为例讲解Android中具有特色的一些功能:传感器和地理信息技术。具体来说就是介绍加速度传感器、光照传感器、方向传感器的使用,并根据它们的原理开发具有特殊功能的小应用;以及通过使用地理信息技术开发能够定位的应用,使用Geocoder类进行地理位置解析、获取具体的位置,通过使用第三方工具高德地图来展示位置。第13章主要介绍VR这一热门技术,阐述VR的技术实现原理、存在的瓶颈以及当前的市场现状和市场前景,后通过一个实例来讲解基于unity3D的Android平台VR应用开发。第14章讲述Android NDK开发的背景以及优势,并详细讲解如何使用Android Studio进行Android NDK开发。第15章通过一个完整的应用讲述在开发实践中如何将一个产品从需求变为实际可用的应用,并将其发布到应用市场。本书适合的读者本书详细地介绍Android开发的各种知识和技术,从基础到实践,提供了大量代码示例和完整的项目案例,无论是初次接触Android开发的读者,还是想提高Android开发技能的程序员,包括大学生和企业互联网营销人员,都可以通过本书获益。由于笔者水平有限,书中难免有欠妥之处,敬请广大读者批评指正。对于书中存在的问题,读者若有什么建议或意见可发信至[email protected],编者会在时间 回复。本书示例源代码下载为了方便读者学习,本书提供了对应的范例程序,下载地址为http://pan.baidu.com/s/1skOP8PB(区分英文字母大小写以及数字和字母)如果下载有问题,请电子邮件联系[email protected],邮件主题为“Android开发实战:从学习到产品”。致谢编者的很多知识都来源于互联网。互联网是一个丰富的知识资源库,只要你愿意探索总能获得有用的东西。感谢那些在互联网上免费分享知识资源的人们,是他们丰富了互联网的内涵,发扬了知识共享的精神,使得每个人可以平等地获取知识、得到进步。 感谢Google公司和它的Android开发团队,可以说是他们创造了这个移动互联网 时代。感谢清华大学出版社王金柱编辑的支持和鼓励,感谢他在本书编写与出版过程中的热情帮助和耐心指导。
编 者2017年2月8日
13.1 详解VR对于非IT圈的人来说,VR是那么神秘。本节将从VR是什么、VR的关键技术、VR发展历程、VR面临的技术瓶颈、VR的市场前景等多个方面来详细阐述VR。13.1.1 VR是什么VR是Virtual Reality的缩写,中文的意思是虚拟现实。这个概念是在20世纪80年代初提出来的,具体是指借助计算机及传感器技术创造的一种崭新的人机交互手段。虚拟现实技术是仿真技术的一个重要方向,是仿真技术与计算机图形学人机接口技术、多媒体技术、传感技术、网络技术等多种技术的集合,是一门富有挑战性的交叉技术前沿学科和研究领域。虚拟现实技术(VR)主要包括模拟环境、感知、自然技能和传感设备等方面。模拟环境是由计算机生成的、实时动态的三维立体逼真图像。感知是指理想的VR应该具有一切人所具有的感知。除计算机图形技术所生成的视觉感知外,还有听觉、触觉、力觉、运动等感知,甚至包括嗅觉和味觉等,也称为多感知。自然技能是指人的头部转动,眼睛、手势或其他人体行为动作,由计算机来处理、与参与者的动作相适应的数据,并对用户的输入做出实时响应,分别反馈到用户的五官。传感设备是指三维交互设备。VR包括如下特征:? 多感知性:指除一般计算机所具有的视觉感知外,还有听觉感知、触觉感知、运动感知,甚至还包括味觉、嗅觉、感知等。理想的虚拟现实应该具有一切人所具有的感知功能。? 存在感:指用户感到作为主角存在丁模拟环境中的真实程度。理想的模拟环境应该达到使用户难辨真假的程度。? 交互性:指用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度。? 自主性:指虚拟环境中的物体依据现实世界物理运动定律动作的程度。13.1.2 VR的关键技术虚拟现实是多种技术的综合,包括实时三维计算机图形技术,广角(宽视野)立体显示技术,对观察者头、眼和手的跟踪技术,以及触觉/力觉反馈、立体声、网络传输、语音输入输出技术等。下面分别对这些技术加以说明。1. 实时三维计算机图形相比较而言,利用计算机模型产生图形图像并不是太难的事情。如果有足够准确的模型,又有足够的时间,我们就可以生成不同光照条件下各种物体的精确图像,但是这里的关键是实时。例如在飞行模拟系统中图像的刷新相当重要,同时对图像质量的要求也很高,再加上非常复杂的虚拟环境,问题就变得相当困难。2. 显示人看周围的世界时,由于两只眼睛的位置不同,得到的图像略有不同,这些图像在脑子里融合起来就形成了一个关于周围世界的整体景象,这个景象中包括了距离远近的信息。当然,距离信息也可以通过其他方法获得,例如眼睛焦距的远近、物体大小的比较等。在VR系统中,双目立体视觉起了很大作用。用户的两只眼睛看到的不同图像是分别产生的,显示在不同的显示器上。有的系统采用单个显示器,但用户带上特殊的眼镜后,一只眼睛只能看到奇数帧图像,另一只眼睛只能看到偶数帧图像,奇、偶帧之间的不同(视差)就产生了立体感。用户(头、眼)的跟踪:在人造环境中,每个物体相对于系统的坐标系都有一个位置与姿态,而用户也是如此。用户看到的景象是由用户的位置和头(眼)的方向来确定的。跟踪头部运动的虚拟现实头套:在传统的计算机图形技术中,视场的改变是通过鼠标或键盘来实现的,用户的视觉系统和运动感知系统是分离的,而利用头部跟踪来改变图像的视角,用户的视觉系统和运动感知系统之间就可以联系起来,感觉更逼真。另一个优点是,用户不仅可以通过双目立体视觉去认识环境,还可以通过头部的运动去观察环境。在用户与计算机的交互中,键盘和鼠标是目前常用的工具,但对于三维空间来说,它们都不太适合。在三维空间中因为有6个自由度,我们很难找出比较直观的办法把鼠标的平面运动映射成三维空间的任意运动。现在,已经有一些设备可以提供6个自由度,如3Space数字化仪和SpaceBall空间球等。另外,一些性能比较优异的设备是数据手套和数据衣。3. 声音人能够很好地判定声源的方向。在水平方向上,我们靠声音的相位差及强度的差别来确定声音的方向,因为声音到达两只耳朵的时间或距离有所不同。常见的立体声效果就是靠左右耳听到在不同位置录制的不同声音来实现的,所以会有一种方向感。在现实生活里,当头部转动时,听到的声音的方向就会改变。但目前在VR系统中,声音的方向与用户头部的运动无关。4. 感觉反馈在一个VR系统中,用户可以看到一个虚拟的杯子。你可以设法去抓住它,但是你的手没有真正接触杯子的感觉,并有可能穿过虚拟杯子的“表面”,而这在现实生活中是不可能的。解决这一问题的常用装置是在手套内层安装一些可以振动的触点来模拟触觉。5. 语音在VR系统中,语音的输入输出也很重要。这就要求虚拟环境能听懂人的语言,并能与人实时交互。而让计算机识别人的语音是相当困难的,因为语音信号和自然语言信号有其“多边性”和复杂性。例如,连续语音中词与词之间没有明显的停顿,同一词、同一字的发音受前后词、字的影响,不仅不同人说同一词会有所不同,就是同一人发音也会受到心理、生理和环境的影响而有所不同。使用人的自然语言作为计算机输入目前有两个问题,首先是效率问题,为便于计算机理解,输入的语音可能会相当啰嗦。其次是正确性问题,计算机理解语音的方法是对比匹配,而没有人的智能。13.1.3 VR发展历程VR经历了3次热潮:次源于20世纪60年代,确立了VR技术原理;第二次发生在20世纪90年代,VR试图商业化但未能成功;目前正处于第三次热潮前期,以Facebook 20亿美元收购Oculus为标志,全球范围内掀起了VR商业化、普及化的浪潮。次热潮发生在20世纪60年代,科学家们建立了VR的基础原理和产品光学构造。20世纪60年代,电影摄影师Morton Heilig提交了一款VR设备的专利申请文件,专利文件上的描述是“用于个人使用的立体电视设备”。尽管这款设计来自于50多年前,但可以看出与Oculus Rift、Google Cardboard有很多相似之处。1967年,Heilig又构造了一个多感知仿环境的虚拟现实系统Sensorama Simulator,这也是历史上套VR系统,它能够提供真实的3D体验,例如用户在观看摩托车形式的画面时,不仅能看到立体、彩色、变化的街道画面,还能听到立体声,感受到行车的颠簸、扑面而来的风以及闻到花的芳香。1968年美国计算机图形学之父Ivan Sutherlan在哈佛大学组织开发了个计算机图形驱动的头盔显示器HMD及头部位置跟踪系统,是VR发展史上一个重要的里程碑。进入20世纪80年代,VR相关技术在飞行、航天等领域得到比较广泛的应用。第二次热潮发生在20世纪90年代,这是一次如火如荼的商业化热潮,但终没能获得成功。1989年Jaron Lanier首次提出Virtual Reality的概念,被称为“虚拟现实之父”。1991年,一款名为“Virtuality 1000CS”的设备出现在消费市场中,笨重的外形、单一的功能和昂贵的价格使其并未得到消费者的认可,但掀起了一个VR商业化的浪潮,世嘉、索尼、任天堂等都陆续推出了自己的VR游戏机产品。在这一轮商业化热潮中,由于光学、计算机、图形、数据等领域技术尚处于高速发展早期、产业链也不完备,并未得到消费者的积极响应。但此后,企业的VR商业化尝试一直没有停止。第三次热潮源于2014年Facebook 20亿美元收购Oculus,VR商业化进程在全球范围内得到加速。2014年3月26日,Oculus VR被Facebook以20亿美元收购,再次引爆全球VR市场。三星、HTC、索尼、雷蛇、佳能等科技巨头组团加入,让人们看到这个行业正在蓬勃发展;国内,目前已经出现数百家VR领域创业公司,覆盖全产业链环节,例如交互、摄像、现实设备、游戏、视频等。暴风科技登录创业板,成为“虚拟现实股”,吸引更多创业者和投资者进入VR领域。13.1.4 VR在技术层面上的现状到目录为止,VR的发展还面临如下一些技术上的瓶颈。? 硬件瓶颈。AR对计算能力的要求比VR高一个数量级,目前的CPU、GPU无法支持,更无法保证在轻便的硬件上实现足够的计算速度、存储空间、传输速率和续航能力。? 图像技术瓶颈。图像识别技术不成熟,特别是在复杂图形、动态图像、特殊场景(如夜间)等方面,信息筛选、识别的正确率和精确率均较低,远不足以支撑一款消费级产品;实时三维建模技术缺乏:需要以图像识别技术作为基础,仅处于实验室阶段;精确定位技术误差大,远未到商用阶段。? 数据瓶颈。在现实环境中实现无差别图像视频识别需要极其庞大的数据规模,如一条街道上,需要街景、人脸、服装等各种数据;目前数据的采集、存储、传输、分析技术都有需要解决的难题,仅海量数据的清洗、录入本身就是浩瀚的工程。虽然目前VR产品的体验仍有很多局限,还不足以进入消费市场,但投资机构普遍重视、企业研发极其活跃,已经完成从无到有的冷启动。VR技术包括4项关键指标,领先厂商已经达标,VR技术趋于成熟。这4项指标分别为:屏幕刷新率、屏幕分辨率、延迟和设备计算能力。目前高通骁龙820已经上市,19.3ms内的延迟已经可以达到;90Hz和2K屏幕已进入市场,可以提供基础级VR产品体验。同时,其他方面的技术(如输入设备在姿态矫正、复位功能、精准度、延迟等方面)持续改善;传输设备提速并无线化;更小体积硬件下的续航能力和存储容量不断提升;配套系统和中间件开发 完善。首先,VR系统越发成熟。其实,目前Windows、Android系统已经能够较好地支持VR的软硬件、提供较好的体验,支撑消费级应用,而Google、Oculus、Razer还都在开发VR专用系统。其次,核心技术将于明年普及。明年将有更多厂商和设备能够在核心技术参数上达到VR级,这是硬件和应用在消费市场爆发的必要条件。再次,世界主流的VR硬件都将推出消费者版本。到目前为止,全球体验好的VR硬件,包括Oculus Rift、三星Gear VR、Value&HTC Vive和索尼PlayStation VR,都仅推出了开发者版本,而这四大产品都将推出消费者版,这将直接引爆消费市场和应用开发者群体。13.1.5 VR当前市场现状当前,VR技术得到了业界的普遍关注,但这并不是首次。早在20世纪90年代就已经有3D游戏上市,VR在当时也引发了类似于当前的关注度。例如,游戏方面有Virtuality的VR游戏系统和任天堂的Vortual Boy游戏机,电影方面有《异度空间》(Lawnmower Man)、《时空悍将》(Virtuosity)和《捍卫机密》(Johnny Mnemonic),书籍方面有《雪崩》(Snow Crash)和《桃色机密》(Disclosure)。但是,当时的VR技术没有跟上媒体不切合实际的想象。例如,3D游戏画质较差、价格高、时间延迟、设备计算能力不足等。终,这些产品以失败告终,因为消费者对这些技术并不满意,所以次VR热潮就此消退。到了2014年,Facebook以20亿美元收购Oculus后,类似的VR热再次袭来。在过去的两年中,VR/AR领域共进行了225笔风险投资,投资额达到了35亿美元。与20世纪90年代的失败相比,当前的VR热有什么不同呢?答案在于技术。当前计算机的运算能力足够强大,足以用于渲染虚拟现实世界。同时,手机的性能得到大幅提升。总之,当前的技术已经解决了20世纪90年代的许多局限。也正因如此,一些大型科技公司开始涉足于其中。13.1.6 VR的市场前景很多专家预测,预计到2020年,全球头戴VR设备年销量会达4000万台,硬件市场规模至少400亿元,加上内容、企业级市场,将是千亿以上。从长远来看,VR产业规模万亿可期。基于知觉管理与虚拟场景两大系统,我们从知觉捕捉、知觉反馈、主机、系统、应用和内容6大维度对虚拟现实的产业链进行解构。1. 知觉捕捉设备在各类知觉中,目前视觉捕捉是主流,听觉、触觉捕捉尚不成熟,嗅觉、味觉捕捉还处于实验室阶段。视觉捕捉可以分为眼部追踪、头部追踪、肢体动作(手势等)捕捉、全身动作捕捉4种形式,不同的捕捉设备能够提供不同的沉浸感体验,也细分了捕捉设备市场。2. 知觉反馈视觉是人类获取信息的主要知觉系统,但目前视觉反馈设备尚不理想,主流的视觉反馈设备有眼镜、头盔、一体机3类,其中眼镜比较简陋、沉浸感不足,头盔和一体机沉浸感较好,但价格较高、便捷性较差。相比之下,听觉反馈已经相当成熟。3. 主机目前的VR内容主要通过移动端、PC端或者一体机输入,脑电波计算仍在实验室阶段。所以,目前VR主机主要借助PC、智能手机,也有不少公司将主机嵌入VR一体机中。总体来看,当前计算能力、存储空间、传输速率基本可以满足基础VR设备所需。由于PC的计算能力和扩展性强于手机,因此基于PC的VR头盔能够提供更好的体验。支撑虚实不分的VR体验,目前的主机尚有3大局限。一是计算速度不足,虚拟出一个能够足以欺骗大脑的影像,而且可以和意识反馈互动,驱动这个影像的计算芯片超出现有普通的PC和手机。当然,提升终端计算力并不是目前科技发展的主流趋势,可以借助于速度越来越快的网络,将主要计算放在云端进行,而直接向终端下发计算结果。二是存储空间、传输速度、电池技术跟不上,VR影像程序的体积以10GB为单位,如果直接从云端点播,我们需要2~20MB/s的下行速度—— 在目前的带宽环境下基本可以实现;但鲜有移动设备的电池能够支撑20GB大小数据量的持续高速下载,这决定了极致体验还需要依赖PC或专用主机,极大地限制了VR的使用场景。三是便捷性很差,PC主机的体积和重量严重限制了它的使用场景,智能手机作为VR主机,也存在尺寸不匹配、散热等问题。4. VR系统VR系统即VR操作系统,是直接运行在主机上的系统软件,用于管理计算机硬件资源和软件程序、支持所有VR应用程序,是未来VR生态的基石。VR系统的核心价值在于能够定义行业标准,搭建VR的基础和通用模块,无缝融合多源数据和多源模型。从产业格局上看,得系统者得平台、得行业话语权。与其他领域类似,有先发优势的企业总愿意用封闭换体验,后来者则喜欢讲开源图颠覆,比如苹果iOS和谷歌Android。在虚拟现实领域,Oculus采用封闭的苹果模式已成定局,而Google、雷蛇等后来者只能以开源、开放吸引开发者。从国内来看,中小企业尚不具备开发OS的技术能力,大多希望从应用市场、播放器等出发打造平台;而互联网巨头们普遍在观望,等待入局时机。5. VR应用VR应用分为3个层面:自上而下分别是应用软件、应用分发、中间件。? 应用软件:提供各种场景下VR服务的软件,例如VR播放器、各类VR游戏等。应用软件是直接接触用户、决定用户体验的末端产品,是VR产业链软硬件技术的集中体现。目前,VR应用有一些简单产品,随着硬件逐步成熟,将迎来大规模爆发。? 应用分发:应用分发被认为是VR系统之外另一大入口。目前主流的应用分发平台有应用商店(移动端)和网站分发(PC)两大类,也有些VR论坛带有分发功能。由于目前VR行业目前还是硬件导向,VR应用分发主要由硬件厂商主导。? 中间件:是一种独立的系统软件或服务程序,可在不同系统间共享资源、可在不同应用中得到复用,典型的就是游戏引擎。成熟的VR中间件将促进标准统一,提升VR应用开发效率,快速引爆VR应用规模。已有一批中间件开始支持VR技术,英伟达(NVIDIA)2014年9月发布了VR Direct技术,2015年8月26日发布了VR游戏开发者的新开发套件——GameWorks VR Beta版本,此外还有SGI的OPENGL接口、MS的DirectX接口、AMD的Liquid VR技术、Crytek的CryEngine、MultiGen-Paradigm公司的Vega Prime等。6. VR内容当前VR内容极为短缺,影视内容以短片和UGC为主,游戏几乎全是DEMO。VR内容将由一个个CP(Content Provider)基于通用标准开发完成,VR早期市场覆盖的产品一定是游戏内容和影视内容。国内外,几乎所有领域都在关注VR,从影视、游戏到会展、直播、成人、旅游、地产等,其中不少企业已经投入研发制作。VR内容总体分为三大方面:专业设备供应商、内容制作厂商、内容运营厂商。VR典型设备,如NEXTVR的VR3D摄像机系统、诺基亚的OZO、诺亦腾的全身动作捕捉系统等;内容制作环节,国外已经有不少著名影视业游戏公司参与进来,例如迪士尼、索尼等;国内大企业普遍还处于观望状态,反而是创业公司更为活跃,如TVR时光机、超凡视幻、兰亭数字、天舍文化、K-Labs、昊威创视等。13.1.7 主流的硬件设备形态VR头戴设备(“眼罩”)主要分为3种:眼镜、头盔、一体机。? 因为PC的局限以及pc+头盔使用场景的限制,VR头盔也不太可能成为2C市场大规模普及的设备;但因为企业级客户对计算能力要求高、使用便捷性要求低,头盔会成为B端市场的主流设备。? 由于智能手机性能持续快速提升,移动开发环境非常成熟和活跃,加上VR眼镜低成本带来价格优势,我们判断眼镜将是未来几年VR头戴设备的主流形态。? 对于一体机来说,“轻便”与“性能”难以兼顾,而且价格较高。这也导致一体机不会成为近期的主流产品,世界主流VR厂商目前都还没有推出一体机。但我们相信,随着技术进步和元件微型化,VR一体机将在性能、轻便上实现兼顾,而且以低于头盔、高于眼镜的价格赢得广泛用户。13.1.8 谁会领衔VR内容制作由于处于投入期,整个VR内容行业都附着在VR硬件产业上。在早期,VR内容不具备盈利条件,所以内容公司动力不足;相反,VR硬件公司为了教育市场,必须有内容支撑才能提供完整体验,所以目前是硬件行业推动内容建设。例如,领军者Oculus收购游戏代码引擎RakNet、3D场景技术公司Surreal Vision、成立电影工作室Story Studio,陆续推出标杆式VR电影短片《Lost》《Henry》《Help》等,做了整个产业链该做的事。国内的暴风科技、3Glass、乐蜗等也包揽了应用分发、视频、游戏等环节,其中应用分发普遍自建平台,而视频游戏内容多是网络下载和对外合作,少部分自主研发。随着VR头戴设备的普及,VR内容分发将独立发展,终成为行业入口。随着行业逐渐发展、内容日趋丰富、版权趋于规范,用户在一家硬件公司获得的内容将非常有限,而硬件公司做应用分发则更加不经济和不效率,所以VR应用分发会逐渐成为一个独立产业环节,而覆盖更多头戴设备和用户的平台将掌握这一行业入口。我们分析搭配手机使用的VR眼镜会成为近期的主流设备,所以掌握VR应用分发话语权的有可能是主流手机厂商或者广泛兼容各型手机的应用分发平台。13.2 基于Unity3D的Android平台VR应用开发北京时间2015年5月29日凌晨0:30在美国旧金山举办的2015谷歌I/O开发者大会上,素以慷慨著称的谷歌并没有像以往那样大派礼物,除了三星或者LG智能手表的二选一外,开发者还可以领到一个小小的黄色纸板盒Cardboard,如图13-1与图13-2所示。不过,这个看起来非常寒碜的再生纸板盒却是I/O大会上令人惊喜的产品,这就是谷歌推出的廉价3D眼镜。本书中的VR应用就是将Android手机和Google Cardboard结合,并使用Cardboard SDK在Android手机上开发出Cardboard应用来实现的。 图13-1 Cardboard后视图 图13-2 Cardboard测试图Cardboard初是谷歌法国巴黎部门的两位工程师大卫?科兹(David Coz)和达米安?亨利(Damien Henry)的创意。他们利用谷歌“20%时间”规定,花了6个月的时间,打造出来这个实验项目,意在将智能手机变成一个虚拟现实的原型设备。Cardboard纸盒内包括了纸板、双凸透镜、磁石、魔力贴、橡皮筋以及NFC贴等部件。按照纸盒上面的说明,几分钟内就组装出一个看起来非常简陋的玩具眼镜。凸透镜的前部留了一个放手机的空间,而半圆形的凹槽正好可以把脸和鼻子埋进去。Cardboard只是一副简单的3D眼镜,但这个眼镜加上智能手机就可以组成一个虚拟现实(VR)设备。要使用Cardboard,用户还需要在Google Play官网上搜索Cardboard应用。它可以将手机里的内容进行分屏显示,由于两只眼睛看到的内容有视差,因此会产生立体效果。通过使用手机摄像头和内置的螺旋仪,在移动头部时能让眼前显示的内容产生相应变化。应用程序可以让用户在虚拟现实的情景下观看YouTube、谷歌街景或谷歌地图。CardBoard的虚拟现实效果是由一款CardBoard与一部安卓手机结合而成的,眼镜镜体通过透镜加屏幕的原理,将虚像呈现在人的明视距离处,实现了沉浸式的虚拟现实感,目前国内虚拟现实眼镜(如暴风魔镜等)大都是这个原理,只不过做了细致的包装,使得佩戴更加舒适。图13-3所示即为其原理图(可根据原理自行DIV)。 图13-3 Cardboard实现原理图在Android平台上的CardBoard应用开发有两种方式:? 种方式是通过Google提供的Cardboard SDK,工程师可以使用Android原生的SurfaceView与OpenGL ES 开发。这种方式可扩展性很强,但是相应的复杂度比较高,导入3D模型等都需要手写代码。? 另外一种在Android平台上进行VR开发的方法是通过3D引擎(如Unity3D等)进行开发。这种方式适合开发游戏,复杂性较低,模拟左右双眼只需要两个摄像机就可以了。Unity引擎功能强大,基本上能适应大部分需求,而且开发便利,资料很全。Google提供了一个Cardboard SDK for Unity,可以很方便地进入虚拟现实的世界,但是开发复杂应用又会力不从心。本书将讲述如何通过Unity3D进行VR开发,如果想要使用Android原生的SurfaceView与OpenGL ES开发,也可以下载Google官方提供的demo进行研究。本书是描述Android开发的书籍,对VR的讲述主要是希望通过本章内容使读者可以入门,同时涉及的相关Unity3D知识非常简单,所以关于Unity3D开发并不进行深入讲解。如有兴趣,读者可自行研究。文中将通过利用Google官方的demo创建一个自己的场景,把自己的模型放进场景,用虚拟现实眼镜进行观赏甚至操作。13.2.1 下载Cardboard SDK for Unity进入Google Cardboard 官方网站的开发者指南页面,如图13-4所示。点击左侧Unity SDK 下的Download and Samples(https://developers.google.com/cardboard/unity/download),再点击Download Cardboard SDK for Unity (direct link to zip )进行下载。 图13-4 Cardboard 官方网站的开发者指南页面13.2.2 导入CardboardSDKForUnity.unitypackage如果下载的是旧版SDK包,那么里面只有一个CardboardSDKForUnity.unitypackage,导入之后包含支持代码和一个例子;新版SDK包中则包含CardboardSDKForUnity.unitypackage和CardboardSDKForUnity.unitypackage两个包,个是库,第二个是Demo,将两个包都导入后即可运行实例。首先打开Unity,新建一个Project,如图13-5所示。 图13-5 打开Unity并新建一个工程然后选择Assets→Import Package→Custom Package…,如图13-6所示。 图13-6 打开Custom Package引入下载好的SDK包,如图13-7所示。 图13-7 引入SDK包13.2.3 运行DemoScene把.unitypackage文件导入之后,在Project面板的资源文件夹下就会多出一个Cardboard文件夹,包括SDK的插件代码和Demo示例。查看Cardboard文件夹下的 DemoScene文件夹,这是其中的一个示例,如图13-8所示。 图13-8 DemoScene实例文件夹中的内容双击场景文件DemoScene,打开示例,如图13-9所示。 图13-9 在Unity中打开场景文件DemoScene效果图点击上方的运行按钮(小箭头),就可以看到Demo示例的运行效果了,如图13-10所示。 图13-10 DemoScene实例的运行效果运行之后,按住Alt键移动鼠标,模拟头部转动,按住Ctrl键模拟歪脖子的时候视角会变化,点击鼠标相当于触发,可以用来操作。这个Demo且有几个功能:①把目光也就是小黄点对准方块,点击鼠标,方块会转动到一个有距离限制的球面上的随机位置。②当目光注视方块时,方块会从红色变成绿色,当目光离开方块时,方块会从绿色变回红色。③在脚下有3个按钮,分别是下面3种:Reset,重新把方块放回初始位置; Recenter,重新把视角左右方向上回归中间;VR Mode,打开或者关闭VR模式(分屏与否)。这个Demo的代码只有一个文件,并且十分短小,仅仅几行脚本就实现了分屏、陀螺仪、视角转动等功能。我们不得不说,Cardboard SDK 功能还是十分强大的。接下来设置Android SDK路径,打包导出为安卓工程,在手机上安装。需要强调的是,必须安装了Android支持插件之后才能设置Android SDK,否则是设置不了的,如图13-11所示。互联网上的很多教程都忽略了此步骤,让很多初学者吃了苦头。 图13-11 设置Android SDK导出Android Apk,如图13-12所示。这里需要说明的是,在导出时需要进行一些设置,点击下面的Player Settings,之后右侧会出现设置界面,如图13-13所示。这里需要重新设置一下包名,使用默认包名会打包失败,还可以设置应用的图标、名称等。 图13-12 导出Android Apk文件安装到手机(也可以放在Cardboard或者暴风魔镜等成品镜中进行感受。如果条件不允许,直接拿起手机横屏观看也可以。)之后的效果如图13-14所示。 图13-13 导出Android Apk文件之前做的一些设置 图13-14 在手机中观察制作的VR内容的效果13.2.4 使用Unity3D创建一个自己的场景使用Unity3D创建一个自己的场景其实很简单,只需要从网上下载一份FBX格式的渲染图,直接拖进Unity3D即可。图13-15所示是下载的FBX格式3D图。 点击左侧的CardboardMain,也就是左右眼摄像机组成的主摄像机,用移动工具把它移动到想要的位置,再把摄像机放置到了机舱内部,模拟驾驶员视角。制作过程如图13-16所示,运行之后的效果如图13-17所示。 图13-16 创建简单VR场景 图13-17 自己创建的简单VR场景的运行效果这里打包成Apk文件的过程和上述过程一致,不再赘述。13.3 小 结VR作为全球科技圈热门的新技术、新领域,同时也是一个全新的消费领域,当之无愧成为创新的主角,自然也受到了各方资本的热捧。目前,国内出现了不少VR创业公司,产业还处于启动期,涉及VR设备(眼镜等)、内容制作(游戏、视频等)、发布平台等,大量的头戴眼镜盒子、外接式头戴显示器等VR设备向消费级市场拓展,在政策的扶持、资本的推动下,自2015年以来,参与虚拟现实领域的企业大幅增加,目前国内有超过100家VR设备开发公司。同时,在我国创新驱动战略的推动下,包括许多VR创业公司在内,我国的VR行业吸引了大量的资本注入。我国VR行业呈现出了欣欣向荣的发展景象。此时进入VR行业正当其时。关于VR应用的开发,本章只是提供了简单的案例,之后还会有相关书籍出版,以供读者学习。读者也可以下载carbon for Android的SDK进行学习。
评论
还没有评论。