Android 4高级编程
2013-4-1
清华大学出版社
(美)迈耶(Meier, R.) 著
佘建伟,赵凯
无
对移动开发人员来说,现在是一个令人心潮澎湃的时代。手机从来没有像今天这样流行,强大的智能手机产品已经为消费者所普遍接受,而且Android生态系统已经扩展到了平板电脑和电视设备,进一步增加了您的Android应用程序的受众。现在,外观时尚且用途广泛的手机带有GPS、加速计、NFC和触摸屏等硬件功能,并且具有固定费率且定价合理的数据计划,因此,它们成为了吸引越来越多的开发者创建各种新颖有趣的Android应用程序的平台。Android为移动应用程序开发提供了一个开放的平台。因为没有了人为制造的障碍,所以Android开发人员可以自由地编写能够充分利用日益强大的手机硬件的应用程序,并在一个开放的市场上销售它们。因此,随着移动设备的销售量不断增长,开发者对Android设备的兴趣也出现了爆炸性的增长。截止到2012年,市场上有数百个手机和平板电脑OEM,包括HTC、Motorola、LG、Samsung、ASUS和Sony Ericsson。有超过3亿的Android设备已被激活,并且这个数字仍在以每天新激活850000个设备的速度增长。通过使用Google Play,开发人员可以利用开放的市场向所有兼容的Android设备发布免费或者收费的应用程序,而不需要经历审查过程。Android构建在一个开源框架之上,并且有强大的SDK库,已经使开发人员在Google Play上发布了超过450000个应用程序。本书将指导你使用Android SDK的版本4来构建移动应用程序。每章的讲解将通过一系列示例项目帮助你逐步掌握Android中的各种新功能和技术,以便你能够最大限度地利用Android。本书介绍了Android编程入门所需的所有基础知识,同时为有经验的移动开发人员讲解了如何利用Android的独特功能来增强现有应用程序或者创建新的、创造性的应用程序。Google的理念是尽快发布,然后不断更新。自从2008年10月Android第一次完整发布以来,共推出了19个平台和SDK版本。由于发布周期如此之快,软件和开发库很可能会有定期的修改和丰富。虽然Android的开发团队会尽可能地保持向后兼容性,但在未来的版本中,本书提供的某些信息仍可能会过时。类似地,并不是每个用户的Android设备都在运行最新的平台版本。只要有可能,本书就会指出哪些平台版本支持书中所介绍的功能,以及可以使用哪些方法为早期设备的用户提供支持。本书的内容和示例提供了如何使用当前SDK来编写优秀的移动应用程序所需要的基础知识,同时也保持了快速适应未来版本更强大功能的灵活性。0.1读者对象本书适合所有对在Android移动手机平台上创建应用程序感兴趣的人。不管是经验丰富的移动开发人员,还是想通过Android开发移动应用程序的新手,都能够从本书中获得十分有价值的信息。如果读者使用过手机(特别是运行Android的手机),那么这些使用经验会对阅读本书有所帮助,但这不是必需的。同样,如果以前有过手机开发经验,那么也有一定的帮助,但这也不是必需的。不过希望读者具有一定的软件开发经验,并且熟悉基本的面向对象开发实践。对Java语法的了解是必需的。深入理解Java并具有Java开发经验会带来明显的优势,不过没有这些知识和经验也没太大影响。第1章和第2章简要介绍移动应用程序的开发过程,并包含如何在Android上开始开发的说明。除了这两章之外,对其他章节的阅读顺序不做要求。如果对第3~9章中描述的基本组件有所理解,将有利于你对其他章节的学习。第10章和第11章详细介绍了如何创建应用程序来提供丰富而一致的用户体验。第12~19章讨论了各种可选功能和高级功能,可以按照顺序阅读,也可以按需阅读。0.2本书内容第1章简要介绍Android,包括它是什么,以及它如何适应当前的移动开发。然后详细讲述了Android作为一个开发平台能够提供什么功能,并解释了它为什么是一个创建移动应用程序的良机。第2章讲述了移动开发的一些最佳实践,并解释了如何下载Android SDK和开始开发应用程序。该章同时也介绍了Android开发工具,并说明了如何从头创建新的应用程序。第3~9章深入探讨了基本的Android应用程序组件。首先讲述了组成Android应用程序和它的生命周期的每个部分,然后介绍了应用程序清单和外部资源,以及活动及其生存期与生命周期。之后将学习如何使用布局、视图和Fragment创建用户界面,并且还将了解在应用程序组件之间执行动作和发送消息的Intent和Broadcast Receiver机制。接着将介绍Internet资源,之后详细讲述了数据存储、检索和共享。读者在此将了解首选项保存机制、文件处理、数据库和游标。还将学习如何使用内容提供器来共享应用程序数据,以及如何访问原生内容提供器的数据。这一部分最后介绍了如何使用Service和后台线程在后台工作。第10章和第11章以第4章介绍的UI知识为基础,介绍了如何使用操作栏、菜单系统和通知来增强用户体验。在这里将学习如何让应用程序适合各种显示屏(针对多种屏幕尺寸和分辨率进行优化),如何使应用程序更易于访问,以及如何在应用程序内使用语音识别。第12~18章涉及较高级的主题。在这里将学习如何使用罗盘、加速计和其他硬件传感器来让应用程序能够对环境做出响应,然后介绍了地图以及基于位置的服务。接着介绍了如何使用动态Widget、Live Wallpaper和快速搜索框,使你的应用程序通过主屏幕与用户直接交互。在介绍了播放和录制多媒体以及使用摄像头以后,你将了解到Android的通信功能。在介绍了蓝牙、NFC、Wi-FiDirect和网络管理(包括Wi-Fi和移动数据连接)之后,讨论了电话服务和用来发送及接收SMS消息的API。第18章介绍几个高级开发主题,其中包括安全、IPC、Cloud to Device Messaging、License Verification Library和Strict Mode。最后,第19章介绍了在发布和分发应用程序以及利用应用程序盈利时面临的机会和可以采用的选择,重点讨论了Google Play。0.3本书结构本书按照一种合理的顺序进行组织,从而帮助具有不同开发背景的读者更好地学习编写高级Android应用程序的方法。尽管对阅读每个章节的顺序不做要求,但是请注意,某些示例项目是跨越多个章节开发的,在其中每个阶段都会添加一些新功能并做一些改进。富有移动开发经验且拥有能正常工作的Android开发环境的开发人员可以跳过前两章的内容——这两章简要介绍了移动开发的基本知识以及如何创建开发环境——直接学习第3~9章。因为这几章涵盖了Android开发的基础知识,所以深入理解这几章所讲述的概念非常重要。在学习这几章之后,读者就可以继续学习其余章节了,它们主要介绍了地图、基于位置的服务、后台应用程序以及诸如硬件交互和联网这样的更高级主题。0.4使用本书的要求要使用本书中的示例代码,你需要通过下载Android SDK库和开发工具以及Java开发包,来创建一个Android开发环境。你可能还希望通过下载和安装Eclipse和Android开发工具插件来简化开发工作,但是这些都不是必需的。Windows、Mac OS和Linux系统环境都支持Android开发,可以从Android站点下载相应的SDK。学习本书内容或者开发Android应用程序并不需要Android设备,但是有一台Android设备的帮助很大,尤其是在测试应用程序时。
《Android 4高级编程(第3版)》由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4 SDK开发移动应用程序的理想指南。本书见解深刻,帮助经验丰富的Android开发人员充分挖掘Android 4的新特性的潜力,同时讲解了Android开发的基础知识,使初学者也可以借助本书入门。作为一本以实用性为目的的指导图书,本书带领您逐步完成复杂程度越来越高的Android项目,每个项目中都引入一种新的Android平台特性,并着重指出有助于编写引人入胜的应用程序的技术和最佳实践。
本书特色
◆ 深入分析了Android应用程序的组件和生命周期
◆ 探讨了Android的UI原理、设计理念和UI API,使用户界
面在手机、平板电脑和电视上都引人注目
◆ 介绍了创建基于地图的应用程序和使用基于位置的服务
的相关知识
◆ 解释了如何创建后台服务、通知和Cloud to Device Messaging
◆ 演示了如何创建动态的、交互式的主屏幕微件和Live
Wallpaper
◆ 探索了硬件和通信API,包括蓝牙、电话、Wi-Fi Direct、
NFC和Android Beam
◆ 讲解了摄像头和硬件传感器的使用
◆ 详述了新的动画框架和其他增强用户体验的特性,包括
拖放、Action Bar和Fragment
◆ 新增了关于应用程序发布的一章内容
◆ 介绍了License Verification和应用程序内收费服务
作者:(美国)Reto Meier 译者:佘建伟 赵凯Reto Meier,目前是Google Android团队的一名Android开发人员倡导者,帮助Android开发人员创建最优秀的应用程序。Reto是一位经验丰富的软件开发人员,拥有逾10年的GUI应用程序开发经验。进入Google之前,他曾在多种行业中工作过,包括海洋石油、天然气以及金融业。Reto始终不渝地追求掌握新技术,从2007年Android发布之初Reto就迷恋上了此项技术。在Reto个人网站Radioactive Yak上可以了解Reto的兴趣和爱好。他还在Google+和Twitter上分享各种信息。
第1章 Android简介 11.1 一些背景信息 21.1.1 不远的过去 21.1.2 未来的前景 21.2 对Android的误解 31.3 Android:开放的移动开发平台 31.4 原生Android应用程序 41.5 Android SDK的特征 51.5.1 访问硬件(包括摄像头、GPS和传感器) 51.5.2 使用Wi-Fi、蓝牙技术和NFC进行数据传输 61.5.3 地图、地理编码和基于位置的服务 61.5.4 后台服务 61.5.5 使用SQLite数据库进行数据存储和检索 71.5.6 共享数据和应用程序间通信 71.5.7 使用Widget和Live Wallpaper增强主屏幕 71.5.8 广泛的媒体支持和2D/3D图形 71.5.9 Cloud to Device Messaging 81.5.10 优化的内存和进程管理 81.6 开放手机联盟简介 81.7 运行Android的环境 91.8 从事移动开发的原因 91.9 从事Android开发的原因 91.9.1 推动Android普及的因素 101.9.2 Android的独到之处 101.9.3 改变移动开发格局 111.10 开发框架简介 111.10.1 开发包中的资源 121.10.2 理解Android软件栈 121.10.3 Dalvik虚拟机 141.10.4 Android应用程序架构 141.10.5 Android库 15第2章 开始入手 172.1 Android开发 182.1.1 开始前的准备工作 182.1.2 创建第一个Android应用程序 242.1.3 Android应用程序的类型 312.2 面向移动设备和嵌入式设备的开发 322.2.1 硬件限制带来的设计考虑事项 322.2.2 考虑用户环境 352.2.3 Android开发 362.3 Android开发工具 402.3.1 Android虚拟设备管理器 412.3.2 Android SDK管理器 422.3.3 Android模拟器 422.3.4 Dalvik调试监控服务(DDMS) 422.3.5 Android调试桥(ADB) 432.3.6 Hierarchy Viewer和Lint工具 432.3.7 Monkey和Monkey Runner 43第3章 创建应用程序和Activity 453.1 Android应用程序的组成部分 463.2 应用程序Manifest文件简介 473.3 使用Manifest编辑器 543.4 分离资源 553.4.1 创建资源 553.4.2 使用资源 633.4.3 为不同的语言和硬件创建资源 663.4.4 运行时配置更改 683.5 Android应用程序生命周期 703.6 理解应用程序的优先级和进程状态 703.7 Android Application类简介 723.7.1 扩展和使用Application类 723.7.2 重写应用程序的生命周期事件 733.8 深入探讨Android Activity 743.8.1 创建Activity 743.8.2 Activity的生存期 763.8.3 Android Activity类 81第4章 创建用户界面 834.1 Android UI基本设计 844.2 Android UI的基础知识 844.3 布局简介 854.3.1 定义布局 864.3.2 使用布局创建设备无关的UI 874.3.3 优化布局 904.4 To-Do List示例 934.5 Fragment介绍 1004.5.1 创建新的Fragment 1014.5.2 Fragment的生命周期 1014.5.3 Fragment Manager介绍 1054.5.4 向Activity中添加Fragment 1054.5.5 Fragment和Activity之间的接口 1104.5.6 没有用户界面的Fragment 1114.5.7 Android Fragment 类 1124.5.8 对To-Do List示例使用Fragment 1124.6 Android widget 工具箱 1164.7 创建新视图 1174.7.1 修改现有的视图 1184.7.2 创建复合控件 1224.7.3 使用布局创建简单的复合控件 1244.7.4 创建定制的视图 1244.7.5 使用定制的控件 1374.8 Adapter简介 1374.8.1 部分原生Adapter简介 1384.8.2 定制ArrayAdapter 1384.8.3 使用Adapter绑定数据到视图 139第5章 Intent和Broadcast Receiver 1455.1 Intent简介 1455.1.1 使用Intent来启动Activity 1465.1.2 Linkify简介 1535.1.3 使用Intent广播事件 1555.1.4 Local Broadcast Manager 1595.1.5 Pending Intent简介 1605.2 创建Intent Filter和Broadcast Receiver 1615.2.1 使用Intent Filter为隐式Intent提供服务 1615.2.2 使用Intent Filter作为插件和扩展 1705.2.3 监听本地Broadcast Intent 1735.2.4 使用Broadcast Intent监控设备的状态变化 1745.2.5 在运行时管理Manifest Receiver 176第6章 使用Internet资源 1776.1 下载和分析Internet资源 1776.1.1 连接Internet资源 1786.1.2 使用XML Pull Parser分析XML 1796.1.3 创建一个地震查看器 1806.2 使用Download Manager 1866.2.1 下载文件 1866.2.2 自定义Download Manager Notification 1876.2.3 指定下载位置 1886.2.4 取消和删除下载 1896.2.5 查询Download Manager 1896.3 使用Internet服务 1926.4 连接到Google App Engine 1926.5 下载数据而不会耗尽电量的最佳实践 194第7章 文件、保存状态和首选项 1957.1 保存简单的应用程序数据 1957.2 创建并保存Shared Preference 1967.3 检索Shared Preference 1977.4 为地震查看器创建一个设置Activity 1977.5 首选项框架和Preference Activity概述 2057.5.1 在XML中定义一个Preference Screen布局 2067.5.2 Preference Fragment简介 2087.5.3 使用Preference Header定义Preference Fragment的层次结构 2087.5.4 Preference Activity简介 2097.5.5 向后兼容性与Preference Screen 2107.5.6 找到并使用Preference Screen设置的Shared Preference 2107.5.7 Shared Preference Change Listener简介 2117.6 为地震查看器创建一个标准的Preference Activity 2117.7 持久化应用程序实例的状态 2157.7.1 使用Shared Preference保存Activity状态 2157.7.2 使用生命周期处理程序保存和还原Activity实例 2157.7.3 使用生命周期处理程序保存和还原Fragment实例状态 2167.8 将静态文件作为资源添加 2187.9 在文件系统下工作 2187.9.1 文件管理工具 2187.9.2 使用特定于应用程序的文件夹存储文件 2197.9.3 创建私有的应用程序文件 2197.9.4 使用应用程序文件缓存 2207.9.5 存储公共可读的文件 220第8章 数据库和Content Provider 2238.1 Android数据库简介 2238.1.1 SQLite数据库简介 2248.1.2 Content Provider简介 2248.2 SQLite简介 2248.3 Content Value和Cursor 2258.4 使用SQLite数据库 2258.4.1 SQLiteOpenHelper简介 2268.4.2 在不使用SQLiteOpenHelper的情况下打开和创建数据库 2288.4.3 Android数据库设计注意事项 2288.4.4 查询数据库 2288.4.5 从Cursor中提取值 2298.4.6 添加、更新和删除行 2308.5 创建Content Provider 2328.5.1 注册Content Provider 2338.5.2 发布Content Provider的URI地址 2338.5.3 创建Content Provide的数据库 2348.5.4 实现Content Provider查询 2358.5.5 Content Provider事务 2368.5.6 在Content Provider中存储文件 2398.5.7 一个Content Provider的实现框架 2408.6 使用Content Provider 2448.6.1 Content Resolver简介 2448.6.2 查询Content Provider 2448.6.3 使用Cursor Loader异步查询内容 2478.6.4 添加、删除和更新内容 2498.6.5 访问Content Provider中存储的文件 2518.6.6 创建一个To-Do List数据库和Content Provider 2538.7 将搜索功能添加到应用程序中 2608.7.1 使Content Provider可搜索 2618.7.2 为应用程序创建一个搜索Activity 2618.7.3 将搜索Activity设置为应用程序的默认搜索Provider 2638.7.4 使用搜索视图微件 2668.7.5 由Content Provider支持搜索建议 2678.7.6 在快速搜索框中显示搜索结果 2708.8 创建可搜索的地震Content Provider 2708.8.1 创建Content Provider 2708.8.2 使用地震Content Provider 2768.8.3 搜索EarthquakeContent Provider 2798.9 本地Android Content Provider 2858.9.1 使用Media StoreContent Provider 2858.9.2 使用Contacts Contract Content Provider 2868.9.3 使用Calendar Content Provider 293第9章 在后台操作 2979.1 Service简介 2989.1.1 创建和控制Service 2989.1.2 将Service绑定到Activity 3029.1.3 地震监控Service示例 3049.1.4 创建前台Service 3089.2 使用后台线程 3099.2.1 使用AsyncTask运行异步任务 3109.2.2 Intent Service简介 3129.2.3 Loader简介 3139.2.4 手动创建线程和GUI线程同步 3139.3 使用Alarm 3159.3.1 创建、设置和取消Alarm 3169.3.2 设置重复Alarm 3179.3.3 使用重复Alarm调度网络刷新 3189.4 使用Intent Service简化Earthquake更新Service 320第10章 扩展用户体验 32310.1 操作栏简介 32410.1.1 自定义操作栏 32510.1.2 自定义操作栏来控制应用程序的导航行为 32810.1.3 操作栏操作简介 33310.2 向地震监控程序添加一个操作栏 33310.3 创建并使用菜单和操作栏操作项 33910.3.1 Android菜单系统简介 34010.3.2 创建菜单 34110.3.3 指定操作栏的操作 34210.3.4 菜单项选项 34310.3.5 添加操作View和操作提供程序 34410.3.6 在Fragment中添加菜单项 34510.3.7 使用XML定义菜单层次结构 34510.3.8 动态更新菜单项 34710.3.9 处理菜单选择 34710.3.10 子菜单和上下文菜单简介 34810.4 更新地震监控程序 35110.5 全屏显示 35310.6 对话框简介 35510.6.1 创建一个对话框 35610.6.2 使用AlertDialog类 35610.6.3 使用专门的输入对话框 35710.6.4 通过Dialog Fragment管理和显示对话框 35810.6.5 通过Activity事件处理程序管理和显示对话框 36010.6.6 将Activity用作对话框 36110.7 创建Toast 36110.7.1 自定义Toast 36210.7.2 在工作线程中使用Toast 36410.8 Notification简介 36510.8.1 Notification Manager简介 36610.8.2 创建Notification 36610.8.3 设置和自定义通知托盘UI 36910.8.4 配置持续和连续的Notification 37310.8.5 触发、更新和取消Notification 37410.9 向地震监控程序中添加Notification和对话框 376第11章 高级用户体验 38111.1 为每个屏幕尺寸和分辨率做设计 38211.1.1 分辨率无关 38211.1.2 为不同的屏幕大小提供支持和优化 38311.1.3 创建可缩放的图形资源 38611.1.4 创建优化的、自适应的、动态的设计 39011.1.5 反复测试 39011.2 确保可访问性 39111.2.1 为非触屏设备提供导航 39111.2.2 为每个View提供文本描述 39111.3 Android Text-to-Speech简介 39211.4 使用语音识别 39411.4.1 使用语音识别进行语音输入 39511.4.2 使用语音识别进行搜索 39611.5 控制设备振动 39611.6 使用动画 39711.6.1 补间View动画 39711.6.2 创建和使用逐帧动画 40011.6.3 插值属性动画 40011.7 强化View 40411.7.1 高级Canvas绘图 40411.7.2 硬件加速 41911.7.3 Surface View简介 42011.7.4 创建交互式控件 42311.8 高级Drawable资源 42811.9 复制、粘贴和剪贴板 43111.9.1 向剪贴板中复制数据 43111.9.2 粘贴剪贴板数据 431第12章 硬件传感器 43312.1 使用传感器和传感器管理器 43312.1.1 受支持的Android传感器 43412.1.2 虚拟传感器简介 43512.1.3 查找传感器 43512.1.4 监视传感器 43612.1.5 解释传感器值 43812.2 监视设备的移动和方向 43912.2.1 确定设备的自然方向 44012.2.2 加速计简介 44112.2.3 检测加速度变化 44212.2.4 创建一个重力计 44312.2.5 确定设备方向 44612.2.6 创建一个指南针和人工地平仪 45012.2.7 陀螺仪传感器简介 45312.3 环境传感器简介 45412.3.1 使用气压计传感器 45412.3.2 创建气象站 455第13章 地图、地理编码和基于位置的服务 46113.1 使用基于位置的服务 46113.2 在模拟器中使用基于位置的服务 46213.2.1 更新模拟器位置提供器中的位置 46313.2.2 配置模拟器来测试基于位置的服务 46313.3 选择一个位置提供器 46413.3.1 查找位置提供器 46413.3.2 通过指定条件查找位置提供器 46413.3.3 确定位置提供器的能力 46513.4 确定当前位置 46613.4.1 位置的隐私性 46613.4.2 找出上一次确定的位置 46613.4.3 Where Am I示例 46613.4.4 刷新当前位置 46913.4.5 在Where Am I中跟踪位置 47213.4.6 请求单独一次位置更新 47313.5 位置更新的最佳实践 47413.6 使用近距离提醒 47713.7 使用地理编码器 47813.7.1 反向地理编码 47913.7.2 前向地理编码 48013.7.3 对“Where Am I”示例进行地理编码 48113.8 创建基于地图的Activity 48213.8.1 MapView和MapActivity简介 48213.8.2 获得地图的API key 48313.8.3 创建一个基于地图的Activity 48313.8.4 地图和Fragment 48513.8.5 配置和使用MapView 48613.8.6 使用MapController 48613.8.7 对“Where Am I”示例使用地图 48713.8.8 创建和使用覆盖(Overlay) 49013.8.9 MyLocationOverlay简介 49713.8.10 ItemizedOverlay和OverlayItem简介 49813.8.11 将视图固定到地图和地图的某个位置上 50013.9 对Earthquake示例添加地图功能 501第14章 个性化主屏幕 50714.1 主屏幕Widget简介 50714.2 创建App Widgets 50914.2.1 创建Widget的XML布局资源 50914.2.2 定义Widget设置 51114.2.3 创建Widget Broadcast Receiver并将其添加到应用程序的manifest文件中 51214.2.4 AppWidgetManager和RemoteView简介 51314.2.5 刷新Widget 51814.2.6 创建并使用Widget配置Activity 52114.3 创建地震Widget 52214.4 Collection View Widget简介 52814.4.1 创建Collection View Widget的布局 52914.4.2 创建RemoteViewsService 53014.4.3 创建一个RemoteViews-Factory 53114.4.4 使用RemoteViewsService填充CollectionViewWidget 53314.4.5 向Collection View Widget中的项添加交互性 53414.4.6 将Collection View Widget绑定到Content Provider 53514.4.7 刷新Collection View Widget 53714.4.8 创建Earthquake Collection View Widget 53714.5 Live Folder简介 54314.5.1 创建Live Folder 54414.5.2 创建Earthquake Live Folder 54814.6 使用快速搜索框显示应用程序搜索结果 55114.6.1 在快速搜索框中显示搜索结果 55114.6.2 将Earthquake示例的搜索结果添加到快速搜索框中 55214.7 创建Live Wallpaper 55314.7.1 创建Live Wallpaper定义资源 55314.7.2 创建Wallpaper Service 55414.7.3 创建Wallpaper Service引擎 555第15章 音频、视频以及摄像头的使用 55715.1 播放音频和视频 55815.1.1 Media Player简介 55915.1.2 准备音频播放 55915.1.3 准备视频播放 56015.1.4 控制Media Player的播放 56415.1.5 管理媒体播放输出 56615.1.6 响应音量控制 56615.1.7 响应Media播放控件 56715.1.8 请求和管理音频焦点 56915.1.9 当音频输出改变时暂停播放 57115.1.10 Remote Control Client简介 57215.2 操作原始音频 57415.2.1 使用AudioRecord录制声音 57415.2.2 使用AudioTrack播放音频 57515.3 创建一个Sound Pool 57715.4 使用音效 57815.5 使用摄像头拍摄照片 57915.5.1 使用Intent拍摄照片 57915.5.2 直接控制摄像头 58115.5.3 读取并写入 JPEG EXIF图像详细信息 58815.6 录制视频 58915.6.1 使用Intent录制视频 58915.6.2 使用MediaRecorder录制视频 59015.7 使用媒体效果 59315.8 向媒体库中添加新媒体 59415.8.1 使用媒体扫描仪插入媒体 59415.8.2 手动插入媒体 595第16章 蓝牙、NFC、网络和Wi-Fi 59716.1 使用蓝牙 59716.1.1 管理本地蓝牙设备适配器 59816.1.2 可发现性和远程设备发现 60016.1.3 蓝牙通信 60416.2 管理网络和Internet连接 60916.2.1 Connectivity Manager简介 60916.2.2 支持用户首选项以进行后台数据传输 60916.2.3 查找和监视网络连接 61116.3 管理Wi-Fi 61216.3.1 监视Wi-Fi连接 61316.3.2 监视活动的Wi-Fi连接的详细信息 61316.3.3 扫描热点 61316.3.4 管理Wi-Fi配置 61416.3.5 创建Wi-Fi网络配置 61516.4 使用Wi-Fi Direct传输数据 61516.4.1 初始化Wi-Fi Direct框架 61516.4.2 启用Wi-Fi Direct并监视其状态 61716.4.3 发现对等设备 61816.4.4 连接对等设备 61816.4.5 在对等设备之间传输数据 62016.5 近场通信 62116.5.1 读取NFC标签 62216.5.2 使用前台分派系统 62316.5.3 Android Beam简介 625第17章 电话服务和SMS 62917.1 电话服务的硬件支持 62917.1.1 将电话功能指定为必需的硬件功能 62917.1.2 检查电话硬件 63017.2 使用电话服务 63017.2.1 启动电话呼叫 63017.2.2 替换本机拨号程序 63117.2.3 访问电话服务的属性及状态 63217.2.4 使用PhoneStateListener监视电话状态的变化 63517.2.5 使用Intent Receiver监视传入的电话呼叫 63917.3 SMS和MMS简介 64017.3.1 在应用程序中使用SMS和MMS 64017.3.2 使用Intent从应用程序中发送SMS和MMS 64017.3.3 使用SMS Manager发送SMS消息 64117.3.4 监听传入的SMS消息 64417.3.5 紧急响应程序SMS示例 64617.3.6 自动紧急响应程序 65417.4 SIP和VOIP简介 662第18章 Android高级开发 66318.1 Android的安全性 66418.1.1 Linux内核安全 66418.1.2 权限简介 66418.2 Cloud to Device Messaging简介 66618.2.1 C2DM的局限性 66718.2.2 注册使用C2DM 66718.2.3 在C2DM服务器上注册设备 66718.2.4 向设备发送C2DM消息 67018.2.5 接收C2DM消息 67218.3 使用License Verification Library实现版权保护 67318.3.1 安装License Verification Library 67318.3.2 获得License Verification公钥 67318.3.3 配置License Validation Policy 67418.3.4 执行许可验证检查 67418.4 应用程序内收费 67518.4.1 应用程序内收费的局限性 67618.4.2 安装IAB库 67618.4.3 获得公钥和定义可购买的物品 67618.4.4 开始IAB交易 67718.4.5 处理IAB购买请求的响应 67818.5 使用Wake Lock 67918.6 使用AIDL支持Service的IPC 68018.7 处理不同硬件和软件的可用性 68618.7.1 指定硬件的要求 68618.7.2 确认硬件可用性 68718.7.3 构建向后兼容的应用程序 68718.8 利用STRICT模式优化UI性能 689第19章 推广和发布应用程序并从中获利 69119.1 签名和发布应用程序 69119.2 发布应用程序 69319.2.1 Google Play简介 69319.2.2 开始使用Google Play 69419.2.3 发布应用程序 69519.2.4 开发者控制台上的应用程序报告 69719.2.5 查看应用程序错误报告 69719.3 如何通过应用程序赚钱 69819.4 应用程序销售、推广和分发的策略 69919.4.1 应用程序的起步策略 69919.4.2 在Google Play上推广 70019.4.3 国际化 70019.5 分析数据和跟踪推荐人 70119.5.1 使用移动应用程序的Google Analytics 70219.5.2 使用Google Analytics追踪推荐 703
如今的智能手机,功能越来越强大。CUP主频1.5G、双核甚至四核已经成为主流,智能手机已然成为一个“小型PC”。在PC上能够完成的应用功能,手机上基本都可以完成,这给从事手机端应用开发的程序员提供了很大的空间和挑战。智能手机最核心的部分当然是操作系统,目前使用最多的操作系统包括Android、iOS、Symbian、Windows Phone和BlackBerry OS。Android是一种以Linux为基础的开放源代码操作系统。Google于2011年10月19日正式发布Android4.0(代号:Ice Cream Sandwich),距离Android操作系统中的第一个正式版本(于2008年9月23日发布,代号为铁臂阿童木(Astro))的发布,仅仅过去四年。该版本在前一个版本的基础上修复了bug并且添加了一些新功能。较之前的版本,Android4.0统一了手机和平板电脑使用的系统,UI更加人性化,速度也有了很大的提升。对于Android应用开发者而言,他们更关注Android4.0支持的新功能,以开发出更炫、更实用的应用。本书可谓是学习Android4.0的少见的精品,结构清晰、内容新颖且覆盖面广。不仅涵盖了开发Android应用所需的基本知识,如Android平台的基本概念、构建用户界面、消息和广播机制、网络资源的使用、文件系统、构建多任务应用、数据库和数据的搜索,而且还介绍了Android应用开发的高级深入的技术和经验,如怎样才能开发出拥有良好而高级的用户体验和个性UI的应用、地图、人脸识别、传感器、摄像头、蓝牙WIFINFC等硬件的使用,以及多媒体、云客户端开发、应用程序内收费等。书中的代码示例,通用性很强,甚至可以直接应用到项目当中。该书非常适合要进一步提高自己Android开发水平的从业人员和对Android开发有兴趣的读者,也适合作为高校的教材。在翻译本书的过程中,我们尽量遵照作者的原意。一些新的Android词汇我们甚至保留为英文单词,这样更利于开发人员理解!为了保证翻译技术的准确性,大部分的技术点我们都亲自编码上机调试,确保给广大的读者提供最准确的翻译内容和技术指导。确保翻译技术的准确性之外,我们也在内容的通俗易懂上下了功夫,常把译稿交给第一线的开发人员阅读,不断听取他们的意见,期望能给读者带来一本Android编程方面的精品书籍。在这期间,我投入了几乎所有的业余时间,感谢我的爱人对我工作的支持和理解,更要感谢我的翻译合作伙伴的鼎力相助。特别要感谢的是清华大学出版社编辑,他们给了我很多的指导。没有大家的帮助本书就不可能得以成功出版。我们希望广大的读者能够从该书中受益。虽然,我们竭尽所能让译文准确通俗,但由于水平有限,时间有限,书中难免有疏漏的地方,敬请广大读者给予批评和指正。译者
《Android 4高级编程(第3版)》由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4 SDK开发移动应用程序的理想指南,经典图书升级版本!
无
已经搞了两年android开发,初次看到这本书便决定买下来(之前一直在看英文版)。目前已经读到第七章,我想我应该是有发言权的。英文原版书籍很不错,细致系统较为深入;翻译版相对来说就不能用经典来形容了,语句不通顺歧义难以理解的地方还是比较多的,最主要的是作为一本专业的Android书籍,这本书的翻译显得实在不专业,举一例来说明。第七章的第一页:“Shared Preference是一种简单的、轻量级的名称/值对(NVP)机制,用于保存原始应用程序数据,最常见的是用户的应用程序首选项。”大家先看看读起来是否通顺,语法对不对,再看看“名称/值对”是翻译成“键值对”专业呢,还是他这种专业!70多元的价格,这种不够专业和严谨的翻译以及译者序中的“CUP”,等等,让我觉得译者真是践踏了这么经典的书籍。写不出来没关系,但翻译的时候麻烦能用点心思,搞学术的多用点脑袋做事才是正道啊。
翻译水平太中国化,好像中学生翻译的一样,建议买原注的。
不知为何有人说纸张不好,这个不要紧吧,而且我觉得纸张还不错啊。开始说正事。之前我在网上下载过很多pdf电子书,这些书有一个普遍的问题,就是版本不新,要知道Android3及4带来了很多的不同,增加了很多的内容,所以一定要Android3以上,最好Android4,而本书是4.此书深度为中偏上,对已经学Android开发几个月的同学很适合,特别适合作为按主题查阅学习的参考书,本书比较细致了,更细致就得上Android官网了。讲解上,先讲原理,然后从头到尾贯穿几个实例,这种学习方法非常好。原理和实例都有代码下载,各处还有各种重点和难点提示,可以看出编者非常有心。内容上,讲的都是容易迷糊的重点,没有讲最基础的那些东西,比如一个按钮怎么用,所以新手切莫期望学此书来入门,而应该买一本基础书籍。在本书的官网上有电子版下载,不过是英文的,如果你读中文比读英文快,还是建议你买此书。我给此书最高评分。
没看过原著,不知道原著写的怎么样。但是感觉内容该可以。就是翻译,看着挺累的。一点都不自然。
不过内容还不错,可以作参考书
书一看就是盗版的,而且还是残书,书质一点不好,印刷也不好,根本就是盗版书欺骗消费者
内容很充实,但是纸张质量很差啊。首先纸张不结实,感觉要散一样。而且纸张颜色发黄。
速度很快,昨天拍的今天就到了,还是货到付款。书的质量不是特别好,书太厚了700多页,质量不好也情有可原。总体好评!
书是好书,不过,感觉印刷的好像是山寨的一样。晕。。。没法,市面上android的书太少了。
刚刚收到书,内容还没有看,感觉纸张非常非常差,很粗糙,很磨手,建议年纪小的MM们戴手套阅读。
这本书对于初学者而言,可能会稍微难一些,但是对于有安卓基础的人而言,是合适的一本书。建议可以先看完《疯狂Android讲义》后再来看本书,更为合适。
此书译者的水平应该说极差,语序竟然是英文的语序,读起来非常费劲,感觉在读古文不流畅。你们要翻译,能不能认真点?翻译符合中文的阅读风格?? 就你们这破水平,哎,还不如把钱给我,我来翻译。
还没怎么看,具体情况不知道,看着样子还行
书本的内容看了下,适合初级入门的,没多少高级的内容,哎·
书很厚,内容也翔实,请不要因为厚就望而生畏,真正的程序员只会喜欢细致的书籍,而不是讲解一知半解的书。Android开发所涉及到的东西基本都讲到了,喜欢Android,有至于Android开发的朋友可以看一看。
还可以,之前没学过java,不知道看的懂不
android4我想我能在这本书学到一些
内容可以,纸的质量不咋的
看了,讲的很不错。推荐
很好一本书,挺实用!