第1章 初识Android平台 1
1.1 Android简介 1
1.2 Android的制胜法宝 2
1.3 Android的版本发展历程 3
1.3.1 Android1.5(纸杯蛋糕) 3
1.3.2 Android1.6(甜甜圈) 4
1.3.3 Android2.1(松饼) 4
1.3.4 Android2.2(冻酸奶) 5
1.3.5 Android2.3(姜饼) 5
1.3.6 Android3.0(蜂巢) 6
1.3.7 Android4.0(冰激凌三明治) 6
1.3.8 Android4.1/4.2(果冻豆) 7
1.4 Android的系统架构 8
1.5小结 9
第2章 搭建Android开发和测试环境 10
2.1搭建Android开发环境需要些什么 10
2.2安装Java开发环境 10
2.2.1安装JDK 11
2.2.2安装和配置Eclipse 11
2.3安装Android开发环境 12
2.3.1下载和安装Android SDK 13
2.3.2下载和安装 Android NDK 13
2.3.3安装和配置Eclipse插件: ADT 14
2.4配置Android测试环境 15
2.4.1建立Android虚拟设备(AVD) 15
2.4.2启动Android模拟器 16
2.4.3安装真机测试环境 17
2.5小结 18
第3章 第一个Android应用程序 19
3.1从第一个Android程序中可以学到什么 19
3.2建立Android工程 19
3.3 Android工程的结构 21
3.4在窗口上放两个按钮 22
3.5编写窗口类 23
3.6修改字符串资源 24
3.7运行Android应用程序 25
3.8调试Android应用程序 27
3.9签名Android应用程序 27
3.10小结 29
第4章Android应用程序架构 30
4.1 Android应用程序中的资源 30
4.1.1资源存放在哪里 30
4.1.2资源的基本使用方法 30
4.2 Android的应用程序组件 32
4.2.1窗口(Activity)组件 32
4.2.2服务(Service)组件 32
4.2.3广播接收者(B roadcastreceivers)组件 33
4.2.4内容提供者(Content Provider)组件 33
4.3 AndroidManifest.xml文件的结构 33
4.4小结 34
第5章 窗口(Activity)与视图(View) 35
5.1声明和使用Activity 35
5.1.1 Activity的基本用法 35
5.1.2同时适合手机和平板电脑的窗口风格 38
5.2 Activity的生命周期 40
5.3窗口的常用事件 43
5.3.1设置窗口标题事件(onTitleChanged) 44
5.3.2键盘按下和抬起事件(onKeyDown和onKeyUp) 45
5.3.3任意情况下捕捉键盘事件(dispatchKeyEvent) 48
5 .3.4回退事件 (onBackPressed) 49
5.3.5按键长按事件(onKeyLongpPress) 50
5.3.6屏幕触摸事件 (onTouchEvent) 50
5.3.7窗口获得焦点事件(onWindowFocusChanged) 51
5.4在不同Activity之间传递数据 52
5.4.1使用Intent传递数据 53
5.4.2使用静态变量传递数据 54
5.4.3使用剪贴板传递数据 55
5.4.4使用全局对象传递数据 57
5.5从Activity返回数据 59
5.6视图(View) 61
5.6.1视图简介 61
5.6.2使用XML布局文件定义 视图 61
5.6.3在代码中控制视图 62
5.7显示系统窗口 64
5.7.1直接拨号 65
5.7.2将电话号传入拨号程序 65
5.7.3调用拨号程序 65
5.7.4浏览网页 65
5.7.5查看联系人 66
5.7.6显示系统设置界面(设置主 界面、Wi-Fi设置界面) 66
5.7.7启动处理音频的程序 66
5.7.8回到Home窗口(相当于按 Home键) 66
5.8与Activity相关的技巧与特效 67
5.8.1全屏显示(隐藏标题栏和状态栏) 67
5.8.2定制窗口标题栏 71
5.8.3为程序添加Splash 75
5.8.4改变窗口大小、位置和 透明度 76
5.8.5按两次关闭窗口 79
5.8.6关闭所有的窗口 79
5.8.7窗口截屏 80
5.9小结 82
第6章lntent与Intent Filter 83
6.1 Android系统的信使:Intent 83
6.2 Intent对象 84
6.2.1 Intent对象可以封装和传递 哪些信息 84
6.2.2组件名 (Component name) 84
6.2.3动作(Action) 85
6.2.4种类(Category) 86
6.2.5数据(Data) 87
6.2.6附加数据(Extra) 88
6.2.7标志(Flags) 89
6.3显式和隐式访问窗口 89
6.4跨应用程序访问窗口 90
6.5 Android系统的过滤机制大揭秘 96
6.5.1过滤条件的设置 96
6.5.2过滤器的筛选规则 97
6.5.3示例:过滤机制应用 演示 101
6.6 Android源代码与过滤器 104
6.6.1系统内置程序有哪些 窗口可以利用 104
6.6.2显示计算器 (Calculator) 105
6.6.3用浏览器(Browser) 显示网页 106
6.6.4拨打电话(Phone) 与授权 108
6.7获取第三方程序中可调用的窗口 109
6.8传递附加数据(Extra) 111
6.9解析数据 113
6.10小结 114
第7章 窗口(Activity)高级技术 115
7.1 Activity XML属性详解 115
7.1.1设置Activity的基本 信息 115
7.1.2屏幕方向切换(android:screenOrientation) 117
7.1.3阻止Activity销毁和重建(android:confiigChanges) 119
7.1.4允许Activity被实例化(android:enabled) 123
7.1.5在最近应用列表中显示(android:excludeFromRecents) 124
7.1.6允许其他程序访问当前窗口(android:exported) 124
7.1.7硬件加速(android:hardwareAccelerated) 125
7.1.8在多进程中创建窗口实例(android:multiprocess) 125
7.1.9无法返回的Activi(android:noHistory) 125
7.1.10指定要返回的窗口(android:parentActivi Name) 126
7.1.11使窗口受到权限的保护(android:permission) 126
7.1.12改变窗口所在的进程(android:process) 127
7.1.13不保存窗口的状态 (android:stateNot Needed) 129
7.1.14窗口的主题 (android:theme) 129
7.1.15 扩展窗口UI(android:uiOptions) 129
7.1.16设置输入法显示模式 (android:windowSoftlnputMode) 130
7.2深入探索Activity从创建到销毁的过程 130
7.2.1任务(Task)与回退栈(Back Stack) 131
7.2.2保存窗口(Activity)状态 133
7.2.3管理任务和回退栈 134
7.2.4 Activity的4种创建 模式 135
7.2.5用Java代码设置窗口 创建模式 141
7.2.6窗口的乾坤大挪移 (affinity) 144
7.2.7销毁不再使用的窗口 147
7.3 Activity的别名 149
7.4小结 151
第8章 布局 152
8.1 Android的五大布局 152
8.1.1框架布局 (FrameLayout) 152
8.1.2线性布局 (LinearLayout) 154
8.1.3相对布局 (RelativeLayout) 158
8.1.4表格布局 (TableLayout) 159
8.1.5绝对布局 (AbsoluteLayout) 160
8.2属性资源与Android命名空间 160
8.3布局属性 162
8.4布局高级技术 163
8.4.1布局别名 163
8.4.2重用布局 164
8.4.3优化布局 166
8.4.4动态装载布局 167
8.4.5动态设置布局属性 169
8.4.6从右到左布局 (RTL Layout) 169
8.5小结 170
第9章 菜单 171
9.1菜单的基本用法 171
9.1.1创建选项菜单 (Options Menu) 171
9.1.2关联Activity 173
9.1.3响应菜单的单击动作 173
9.1.4动态添加、修改和删除 选项菜单 174
9.1.5带复选框和选项按钮的 子菜单 175
9.1.6上下文菜单 176
9.1.7菜单事件 177
9.1.8从菜单资源中装载菜单 177
9.2菜单特效 177
9.2.1自定义菜单 178
9.2.2模拟UCWeb菜单效果 180
9.3小结 184
第10章Android的资源详解(一) 185
10.1创建资源 185
10.1.1手工创建资源文件 185
10.1.2用ADT模板创建本地化图标资源 186
10.1.3用ADT模板创建XML文件资源 188
10.2使用资源 188
10.2.1生成资源类文件(R.java) 188
10.2.2从XML文件中访问资源 190
10.2.3使用Java代码访问资源 191
10.2.4 Java反射技术与枚举资源 192
10.3字符串(String)资源 193
10.3.1普通字符串 193
10.3.2字符串数组 194
10.3 .3复数字符串 194
10.3.4在字符串中使用引号 195
10.3.5用占位符格式化字符串 195
10.3.6用HTML标签格式化字符串资源 195
10.4值(values)资源 196
10.4.1整数(Integer)资源 196
10.4.2尺寸(Dimension)资源 197
10.4.3布尔(Boolean)资源 198
10.4.4颜色(Color)资源 198
10.4.5 ID资源 199
10.4.6整数数组(Integer-Array)资源 200
10.4.7类型数组(Typed-Array)资源 200
10.5菜单(menu)资源 200
10.6图像(drawable)资源 203
10.6.1普通图像资源 203
10.6.2 XML图像资源 204
10.6.3 Nine-Patch图像资源 204
10.6.4 XML Nine-Patch图像资源 205
10.6.5图层(Layer)资源 205
10.6.6图像状态(State)资源 206
10.6.7图像级别(Level)资源 207
10.6.8淡入淡出(Cross-fade)资源 208
10.6.9嵌入(Inset)图像资源 210
10.6.10剪切(Clip)图像 资源 210
10.6.11外形(Shape)资源 211
10.7小结 212
第11章Android的资源详解(二) 213
11.1动画资源 213
11.1.1属性(Property)动画 213
11.1.2帧(Frame)动画 215
11.1.3移动补间(TranslateTween) 动画 217
11.1.4循环向右移动的EditText与上下弹跳的球 218
11.1.5缩放补间(Scale Tween) 动画 220
11.1.6 跳动的心 221
11.1.7旋转补间(Rotate Tween) 动画 222
11.1.8旋转的星系 222
11.1.9透明度补间(Alpha Tween)动画 223
11.1.10投掷炸弹 224
11.1.11震动渲染器(Shake Interpolator) 226
11.1.12自定义渲染器(Interpolator) 227
11.2风格(Style)资源与主题(Theme) 229
11.3小结 232
第12章 资源的本地化 233
12.1建立本地化的资源目录 233
12.2资源目录的命名规则 237
12.3建立别名资源 237
12.3.1图像别名资源 237
12.3.2布局别名资源 238
12.3.3字符串别名资源 238
12.3.4其他简单值别名资源 238
12.4资源目录的优先级 238
12.5屏幕适配 239
12.5.1屏幕适配要考虑的因素 239
12.5.2适配不同屏幕可以采用 的规则 241
12.5.3屏幕尺寸和屏幕密度 241
12.5.4位置、尺寸和字体应使用屏幕密度单位 244
12.5.5与屏幕适配有关的标识符 244
12.5.6影响屏幕适配的重要因素:布局和图像 245
12.5.7典型的屏幕适配案例 246
12.5.8在Google Play上限制屏幕尺寸和屏幕密度 247
12.5.9在Android模拟器上测试各种屏幕尺寸和密度 248
12.6小结 248
第13章Android的控件详解(一) 249
13.1显示文本的控件(TextView) 249
13.1.1显示富文本(URL、不同大小、字体、颜色的文本) 250
13.1.2用<img>标签在TextView控件上显示图像 252
13.1.3单击链接弹出Activity 254
13.1.4为指定文本添加背景 256
13.2编辑文本的控件(EditText) 258
13.2.1像QQ一样输入表情 图像 259
13.2.2在EditText中输入特定的字符 260
13.2.3 AutoCompleteTextView(自动完成输入内容的控件) 261
13.3按钮(Button)和复选框(Checkbox)控件 263
13.3.1 Button(普通按钮控件) 263
13.3.2图文混排的按钮 265
13.3.3 ImageButton(图像按钮控件) 266
13.3.4 RadioButton(选项按钮控件) 267
13.3.5 ToggleButton(开关状态按钮控件) 267
13.3.6 CheckBox(复选框控件) 268
13.4图像控件(ImageView) 270
13.4.1 ImageView控件的基本 用法 270
13.4.2显示指定区域的图像 270
13.4.3缩放和旋转图像 272
13.5时间与日期控件 273
13.5.1 DatePicker(输入日期 的控件) 273
13.5.2 TimePicker(输入时间 的控件) 274
13.5.3 DatePicker、TimePicker与TextView同步显示 日期和时间 274
13.5.4 AnalogClock和DigitalClock(显示时钟的控件) 275
13.6小结 275
第14章Android的控件详解(二) 276
14.1进度条控件 276
14.1.1 ProgressBar(进度条控件) 276
14.1.2 SeekBar(拖动条控件) 278
14.1.3设置ProgressBar和SeekBar的颜色及背景图 278
14.1.4 RatingBar(评分控件) 281
14.2列表控件 282
14.2.1 ListView(普通列表控件) 282
14.2.2为ListView列表项添加复 选框和选项按钮 285
14.2.3对列表项进行增、删、改操作 286
14.2.4改变列表项的背景色 290
14.2.5 ListActivity(封装ListView的Activity) 290
14.2.6 ExpandableListView(可扩展的列表控件) 291
14.2.7 Spinner(下拉列表控件) 293
14.3 GridView(网格控件) 296
14.4 TabHost(标签控件) 298
14.5 ViewStub(惰性装载控件) 299
14.6小结 300
第15章 可视化UI设计 301
15.1拖放控件 301
15.2设置视图属性 303
15.3预览各种屏幕尺寸 303
15.4语言和地区的本地化测试 304
15.5其他可视化功能 304
15.6小结 305
第16章 对话框、Toast与通知栏(Notifiication) 306
16.1对话框 306
16.1.1带2个按钮(确认/取消) 的对话框 306
16.1.2带3个按钮(覆盖/忽略/取消)的对话框 307
16.1.3简单列表对话框 308
16.1.4单选列表对话框 309
16.1.5多选列表对话框 311
16.1.6进度对话框 312
16.1.7登录对话框 315
16.1.8使用Activity托管对话框 316
16.2 Toast 318
16.3通知(Notifiication) 319
16.3.1在状态栏上显示通知信息 319
16.3.2永久存在的 Notifiication 322
16.3.3自定义Notifiication 323
16.4小结 324
第17章 封装UI和代码利器——Fragment 325
17.1 Fragment简介 325
17.2什么时候使用Fragment 326
17.3按照Fragment设计原则编写程序 328
17.4 Fragment的生命周期 332
17.5创建Fragment 341
17.5.1通过XML布局文件创建Fragment 341
17.5.2通过Java代码创建 Fragment 342
17.5.3 创建无UI的Fragment 344
17.5.4在低版本Android中使用Fragment(SupportLibrary) 345
17.6 Activity与Fragment之间的交互 346
17.6.1 Fragment与Activity之间 的交互 346
17.6.2 Fragment的回调机制 348
17.7 Fragment状态的持久化 351
17.8 Fragment与回退栈(导航) 355
17.9 FragmentManager与FragmentTransaction 357
17.9.1管理Fragment事务 357
17.9.2查找Fragment 357
17.9.3跟踪回退栈状态 358
17.9.4恢复历史状态 358
17.9.5管理Fragment的状态 359
17.9.6添加、删除和替换Fragment 359
17.9.7分离(Detach)与附加(Attach)Fragment 360
17.9.8显示和隐藏Fragment 361
17.10 Fragment扩展 361
17.10.1 ListFragment 361
17.10.2 DialogFragment 363
17.10.3其他Fragment扩展类 366
17.11 Fragment模板源代码分析 366
17.12小结 368
第18章 动作栏——ActionBar 369
18.1 ActionBar简介 369
18.2 ActionBar基础 370
18.2.1隐藏/显示ActionBar 370
18.2.2添加和响应Action按钮 372
18.3可上下两分的ActionBar 374
18.4应用程序图标导航 376
18.5收缩和展开Action View 377
18.6 ActionProvider 380
18.6.1分享信息(ShareActionProvider) 380
18.6.2定制ActionProvider 382
18.7导航标签 384
18.8下拉导航列表 388
18.9小结 390
第19章Android的拖放技术 391
19.1 Android中的拖放操作 391
19.2拖放状态与拖放处理 391
19.3拖动阴影 392
19.4示例:拖动复制图像 393
19.5小结 395
第20章 数据存储解决方案 396
20.1读写key-value对:SharedPreferences 396
20.2文件流操作 397
20.2.1 openFileOutput和openFileInput方法 398
20.2.2读写SD卡中的文件 399
20.3读写JSON格式的数据 400
20.4 SQLite数据库 404
20.4.1 SQLite数据库管理工具 404
20.4.2 SQLiteOpenHelper类与自动升级数据库 405
20.4.3数据绑定与SimpleCursorAdapter类 406
20.4.4操作SD卡上的数据库 409
20.4.5将数据库与应用程序一起发布 410
20.4.6内存数据库 411
20.5小结 412
第21章 内容提供者(Content Provider) 413
21.1 Content Provider的作用 413
21.2获得系统数据 413
21.2.1读取联系人信息 414
21.2.2查看收件箱的短信 415
21.3自定义Content Provider 417
21.3.1查询城市信息 417
21.3.2为Content Provider添加访问权限 422
21.4如何查找系统提供的ContentProvider 423
21.5小结 425
第22章 广播接收器(Broadcast Receiver) 426
22.1什么是广播 426
22.2接收系统广播 427
22.2.1 短信拦截 427
22.2.2用代码注册广播接收器 429
22.2.3广播接收器的优先级 429
22.2.4来去电拦截 430
22.2.5截获屏幕休眠与唤醒 432
22.2.6开机自动运行 433
22.2.7显示手机电池的当前电量 434
22.3发送广播 434
22.4小结 435
第23章 服务(Service) 436
23.1 Service基础 436
23.1.1 Service的生命周期 436
23.1.2开机启动Service 438
23.2跨进程访问(AIDL服务) 439
23.2.1什么是AIDL服务 439
23.2.2建立AIDL服务的步骤 439
23.2.3创建和调用A1DL服务 440
23.2.4传递复杂数据的AIDL服务 442
23.2.5 AIDL与来去电自动挂断 445
23.3小结 447
第24章Android的组件开发 448
24.1 Android支持哪些组件开发方式 448
24.2引用jar文件 449
24.3跨工程引用 450
24.4引用NDK Library 451
24.5动态引用APK文件 451
24.6动静结合的组件 453
24.7脚本类型组件(JavaScript)与WebView控件 453
24.8如何确定动态组件是否安装 457
24.9升级动态组件 459
24.10小结 461
第25章Android的蓝牙开发技术 462
25.1蓝牙简介 462
25.2打开和关闭蓝牙设备 462
25.3搜索蓝牙设备 463
25.4蓝牙数据传输 465
25.5蓝牙通信一定需要UUID吗 467
25.6小结 467
第26章 近距离天线通信——NFC技术 468
26.1 NFC简介 468
26.2 NFC、蓝牙和红外之间的差异 469
26.3 NFC技术的未来前景 470
26.4 Android中的NFC技术 471
26.4.1 NDEF与非NDEF 数据 471
26.4.2 NFC的三重过滤机制 471
26.4.3开启Android的NFC 功能 472
26.4.4编写NFC程序的基本 步骤 473
26.5测试NFC程序需要的设备 474
26.6让Android手机自动运行程序 475
26.6.1向NFC标签写入数据 的基本步骤 475
26.6.2向NFC标签写入启动 Android应用程序的 消息 476
26.7让Android手机自动打开网页 483
26.8读写NFC标签中的文本 485
26.8.1实现读写文本数据应用 的基本思路 485
26.8.2如何将NFC标签变成 NDEF文本格式 485
26.8.3 NDEF文本格式解析 486
26.8.4实现读写文本数据的 Android应用程序 490
26.9读写NFC标签中的Uri 496
26.9.1 NDEF Uri格式解析 496
26.9.2实现读写Uri的 Android应用程序 499
26.10利用NFC标签支持的数据格式进行过滤 502
26.11处理任意NFC标签 504
26.12读写非NDEF格式的数据 505
26.13 Android Beam技术与数据 交互 507
26.13.1传递NDEF消息 507
26.13.2传输文件 511
26.14小结 513
第27章Android的网络开发技术 514
27.1提交HTTP GET和HTTP POST请求 514
27.2 HttpURLConnection类 516
27.3上传文件 517
27.4下载管理(DownloadManager) 519
27.5 Wi-Fi Direct 524
27.5.1 Wi-Fi Direct API的 核心部分 524
27.5.2创建监听Wi-Fi Direct 动作的广播接收器 524
27.5.3注册广播接收器 525
27.5.4发现Wi-Fi Direct设备 526
27.5.5连接Wi-Fi Direct设备 526
27.5.6数据传输 527
27.6 Internet电话(SIP) 528
27.6.1使用SIP的要求和 限制 528
27.6.2配置Android版SIP 电话 528
27.6.3创建SipManager 529
27.6.4注册SIP服务器 529
27.6.5开始打电话 530
27.6.6接听电话 530
27.7小结 531
第28章 并发与定时器 532
28.1 Handler 532
28.1.1更新UI 532
28.1.2延迟执行 535
28.2定时器 537
28.2.1单秒循环的定时器:Chronometer 537
28.2.2任意时间间隔的定时器: Timer 538
28.2.3全局定时器:AlarmManager 539
28.3 AsyncTask 541
28.4小结 543
第29章 异步装载(Loader) 544
29.1 Loader简介 544
29.2 Loader的核心类/接口 544
29.3如何使用Loader 545
29.3.1创建/重用Loader 545
29.3.2遗弃旧的数据 546
29.3.3 LoaderManager与方法回调 546
29.3.4 创建Loader对象(onCreateLoader) 547
29.3.5完成数据装载(onLoadFinished) 547
29.3.6 Loader被重置(onLoaderReset) 548
29.4异步装载联系人(CursorLoader的应用) 548
29.5小结 552
第30章Android推送技术 553
30.1 IOS的推送方案 553
30.2 Windows Phone的推送方案 554
30.3 Android的推送方案 554
30.4第三方推送服务:极光推送 556
30.5自己搭建推送服务器:AndroidPN 557
30.6小结 558
第31章Android的多媒体开发技术 559
31.1音频 559
31.1.1音频播放 559
31.1.2录制音频 561
31.2视频 563
31.2.1播放视频 563
31.2.2录制视频 564
31.3相机 565
31.3.1调用系统的拍照功能 565
31.3.2自定义拍照功能 566
31.4铃声 570
31.5小结 572
第32章Android的2D绘图 573
32.1绘制基本的图形 573
32.1.1绘制像素点 573
32.1.2绘制直线 574
32.1.3绘制圆形 574
32.1.4绘制圆弧 574
32.1.5绘制文本 575
32.1.6示例:绘制基本的图形和文本 575
32.2绘制位图 578
32.2.1绘制Bitmap对象 578
32.2.2使用Drawable.draw方法绘制位图 579
32.2.3示例:用两种方式绘制位图 579
32.3设置图像的透明度 580
32.4旋转图像 581
32.5小结 583
第33章3D绘图之OpenGL ES 584
33.1 OpenGL ES简介 584
33.2在3D空间中绘图 585
33.2.1要绘制3D图形了,第一步要做什么 585
33.2.2定义顶点 587
33.2.3绘制三角形 588
33.2.4三角形合并法绘制矩形 590
33.2.5顶点法绘制矩形 592
33.2.6顶点的选取顺序 592
33.2.7索引法绘制矩形 593
33.2.8基于OpenGL ES的动画原理 594
33.2.9旋转的矩形 594
33.3视图 595
33.3.1有趣的比喻:照相机拍照 596
33.3.2模型变换:立方体 旋转 597
33.3.3用gluLookAt方法变换视图 599
33.4颜色 600
33.5小结 602
第34章Android的桌面上的“尤物” 603
34.1窗口小部件(App Widget) 603
34.1.1在Android桌面上添加 App Widget 603
34.1.2开发App Widget的 步骤 603
34.1.3数字时钟 605
34.1.4 AppWidgetProvider类 607
34.1.5向App Widget添加配置 窗口 608
34.1.6可以选择风格的数字时钟 608
34.2动态壁纸(随机变换的圆圈) 612
34.3小结 618
第35章Android中的短信(SMS)与彩信(MMS)开发技术 619
35.1通过系统程序发短信 619
35.2直接发送短信 619
35.3保存短信发送记录 620
35.4监听短信和彩信 621
35.5显示视频缩略图 622
35.6彩信内容与SMIL协议 624
35.7小结 631
第36章Android的传感器开发技术 632
36.1如何使用传感器 632
36.2加速度传感器 (Accelerometer) 635
36.3重力传感器(Gravity) 635
36.4光线传感器(Light) 636
36.5陀螺仪传感器(Gyroscope) 636
36.5方向传感器(Orientation) 637
36.6其他传感器 638
36.7小结 638
第37章Android的全球定位系统(GPS) 639
37.1 GPS的核心API 639
37.2获取位置提供者 (LocationProvider) 641
37.2.1获取所有可用的 LocationProvider 641
37.2.2根据名称获取 LocationProvider 642
37.2.3根据条件(Criteria)获取 LocationProvider 642
37.3实时获取GPS定位数据 643
37.4测量地球上任意两点之间的距离 645
37.5邻近警告 646
37.6小结 647
第38章 谷歌地图(Google Map)开发应用 648
38.1 Google Map的跨平台解决方案:Maps JavaScript API v3 648
38.2 Google Map的显示与定位 648
38.3在Google Map上插入图像标志 651
38.4插入多个图像标志 653
38.5带阴影的位置坐标信息 653
38.6地图与Java交互 655
38.7小结 657
第39章Android中的人机交互设计 658
39.1手势(Gesture) 658
39.1.1创建手势文件 658
39.1.2通过手势输入字符串 658
39.1.3通过手势调用程序 660
39.1.4编写自己的手势创建器 661
39.2多点触摸与放大/缩小操作 662
39.3语音识别 664
39.4让手机说话(TTS) 665
39.5小结 666
第40章Android中的输入法开发 667
40.1 Android输入法简介 667
40.2控制输入法 668
40.3输入法实战 669
40.3.1实现输入法的步骤 669
40.3.2编写输入法程序 669
40.3.3输入法服务的生命周期 672
40.3.4预输入文本 672
40.3.5输入法设置 673
40.4小结 673
第41章Android NDK开发 674
41.1 Android NDK简介 674
41.2安装、配置和测试NDK开发 674
环境 674
41.2.1系统和软件要求 675
41.2.2下载和安装 Android NDK 675
41.2.3下载和安装Cygwin 675
41.2.4配置Android NDK的 开发环境 677
41.3利用NDK Samples学习NDK开发 678
41.3.1编译NDK Samples 678
41.3.2 NDK程序的结构与命名 规则 678
41.4 Android NDK配置文件详解 679
41.4.1 Android NDK定义的变量 680
41.4.2 Android NDK定义的 函数 680
41.4.3描述模块的变量 681
41.4.4配置Application.mk 文件 682
41.5第一个NDK示例:字母的大小写转换 682
41.5.1编写NDK程序 682
41.5.2编写调用NDK函数的Java程序 684
41.5.3在Eclipse中开发和编译NDK程序 684
41.6 NDK程序读取Java字段值 686
41.7小结 687
第42章Android的测试驱动开发(TDD) 688
42.1 JUnit测试框架 688
42.2测试Activity 688
42.3测试Content Provider 691
42.4测试Service 692
42.5测试普通类 692
42.6小结 693
第43章Android应用的性能优化 694
43.1性能优化的基础知识 694
43.2编写Java程序的最优化原则 695
43.2.1用静态工厂方法代替 构造方法 695
43.2.2避免创建重复的对象 695
43.2.3防止内存泄漏 697
43.2.4返回零长度的集合而不是 null 697
43.2.5通过接口引用对象 698
43 .3避免ANR 698
43.4执行时间测试 699
43.5内存消耗测试 700
43.6测试性能的工具:traceview 701
43.7小结 702
第44章 游戏项目实战:笑脸连连看 703
44.1游戏玩法 703
44.2准备图像素材 703
44.3实现主界面 704
44.4随机生成连连看图像 705
44.5选中两个相同图像后消失 705
44.6用定时器限制游戏时间 706
44.7小结 707
第45章 开源项目实战:NFC侠(NFCMan) 708
45.1什么是NFCMan 708
45.2用Android模拟器和非NFC设备测试NFC应用 709
45.3 NFCMan的实现原理 711
45.4实现服务端程序(NFCMan) 711
45.4.1可视 化 S WT开发环境 712
45.4.2创建NFC标签 712
45.4.3描述虚拟NFC标签的 NFCTag类 714
45.4.4保证虚拟NFC标签的 全局唯一 715
45.4.5显示与保存虚拟NFC 标签 716
45.4.6装载已经存在的虚拟 NFC标签 719
45.4.7开启服务 720
45.4.8处理客户端请求 721
45.4.9保证虚拟Android设备全 局唯一 723
45.4.10描述虚拟Android 设备 724
45.4.11添加虚拟Android 设备 725
45.4.12异常处理机制 727
45.5客户端与服务端之间的数据管道(NFCManService) 728
45.5.1与NFCMan交互(Socket 方式) 728
45.5.2与ANFCMan交互(广播 方式) 732
45.6客户端Library(ANFCMan) 733
45.6.1 ANFCMan的数据结构和 异常类 733
45.6.2 ANFCMan的入口类 734
45.6.3模拟检测到NFC标签的 广播接收器 734
45.6.4同时处理物理NFC标签 和虚拟NFC标签的窗口 735
45.7测试ANFCMan(TestANFCMan) 738
45.8小结 739