第一部分 准备篇——大军未动,粮草先行 2
第1章Android入门 2
1.1 Android的基本概念 3
1.1.1 Android简介 3
1.1.2 Android的系统构架 5
1.2 Android 2.3.x新功能介绍 6
1.2.1显示电池使用状况 6
1.2.2 SIP网络电话 7
1.2.3近场通信(NFC) 7
1.2.4控制多个摄像头 8
1.3 Android 3.x新功能介绍 8
1.3.1重新设计的UI 8
1.3.2系统状态条 9
1.3.3多任务管理 10
1.3.4多重桌面 11
1.3.5电子邮件(E-mail) 11
1.3.6联系人管理 12
1.3.7虚拟键盘与剪贴功能 12
1.3.8相机功能 13
1.3.9视频电话 13
1.3.10支持多核处理器 13
1.4 Android开发环境的搭建 14
1.4.1开发Android程序需要些什么 14
1.4.2安装Android SDK 14
1.4.3安装Eclipse插件ADT 15
1.4.4测试ADT是否安装成功 16
1.5 Android SDK中的常用命令行工具 18
1.5.1启动和关闭adb服务(adb start-server和adb kill-server) 18
1.5.2查询当前模拟器/设备的实例(adb devices) 18
1.5.3安装、卸载和运行程序(adb install、adb uninstall和am) 19
1.5.4 PC与模拟器或真机交换文件(adbpull和adb push) 20
1.5.5 Shell命令 20
1.5.6创建、删除和浏览AVD设备(android) 21
1.5.7获取Android版本对应的ID 21
1.5.8创建SD卡 22
1.6 PC上的Android 22
1.6.1 Android LiveCD 23
1.6.2 AndroidX86 23
1.7 Android的学习资源 24
1.8应用程序商店 24
1.8.1 Android Market 24
1.8.2 Mobile Market (MM) 25
1.8.3其他应用程序商店 26
1.9小结 26
第2章 第一个Android程序 27
2.1编写用于显示当前日期和时间的程序 27
2.1.1新建一个Android工程 27
2.1.2界面控件的布局 29
2.1.3编写实际代码 29
2.2调试程序 32
2.3签名和发布应用程序 33
2.3.1使用命令行方式进行签名 33
2.3.2使用ADT插件方式进行签名 34
2.4 DDMS透视图 36
2.5小结 36
第二部分 基础篇——Android世界的精彩之旅 38
第3章Android应用程序架构 38
3.1 Android应用程序中的资源 38
3.1.1资源存放在哪里 38
3.1.2资源的种类 39
3.1.3资源的基本使用方法 39
3.2 Android的应用程序组件 41
3.2.1活动(Activity)组件 41
3.2.2服务(Service)组件 41
3.2.3广播接收者(Broadcast receivers) 组件 42
3.2.4内容提供者(Content providers) 组件 42
3.3 AndroidManifest.xml文件的结构 42
3.4小结 44
第4章 建立用户接口 45
4.1建立、配置和使用Activity 45
4.1.1建立和配置Activity 46
4.1.2 Activity的生命周期 48
4.1.3 Activity生命周期的演示 50
4.2视图(View) 53
4.2.1视图简介 53
4.2.2使用XML布局文件控制视图 54
4.2.3在代码中控制视图 55
4.2.4混合使用XML布局文件和代码来控制视图 57
4.2.5定制控件(Widget)的3种方式 60
4.2.6定制控件——带图像的TextView 60
4.2.7定制控件——带文本标签的EditText 64
4.2.8定制控件——可更换表盘的指针时钟 67
4.3使用AlertDialog类创建对话框 73
4.3.1 AlertDialog类简介 73
4.3.2【确认/取消】对话框 74
4.3.3创建询问是否删除文件的【确认/取消】对话框 75
4.3.4带3个按钮的对话框 76
4.3.5创建【覆盖/忽略/取消】对话框 77
4.3.6简单列表对话框 78
4.3.7单选列表对话框 79
4.3.8多选列表对话框 80
4.3.9创建3种选择省份的列表对话框 80
4.3.10水平进度对话框和圆形进度对话框 86
4.3.11水平进度对话框和圆形进度对话框演示 87
4.3.12自定义对话框 90
4.3.13创建登录对话框 90
4.3.14用Activity托管对话框 93
4.3.15 创建悬浮对话框和触摸任何位置都可以关闭的对话框 95
4.4 Toast和Notification 98
4.4.1用Toast显示提示信息框 98
4.4.2阻止关闭Toast信息框 99
4.4.3 Notification与状态栏信息 101
4.5菜单 103
4.5.1创建选项菜单 104
4.5.2设置与菜单项关联的图像和Activity 105
4.5.3响应选项菜单项单击事件的3种方式 105
4.5.4动态添加、修改和删除选项菜单 107
4.5.5创建带复选框和选项按钮的子菜单 108
4.5.6创建上下文菜单 109
4.5.7菜单事件 110
4.5.8 Activity菜单、子菜单、上下文菜单演示 111
4.6布局 112
4.6.1框架布局(FrameLayout ) 112
4.6.2霓虹灯效果的TextView 113
4.6.3线性布局(LinearLayout) 115
4.6.4利用LinearLayout将按钮放在屏幕的四角和中心位置 117
4.6.5相对布局(RelativeLayout ) 119
4.6.6利用RelativeLayout实现梅花效果的布局 119
4.6.7表格布局(TableLayout) 120
4.6.8计算器按钮的布局 121
4.6.9绝对布局(AbsoluteLayout) 121
4.6.10查看apk文件中的布局 122
4.7小结 122
第5章 控件详解 123
5.1显示和编辑文本的控件 124
5.1.1显示文本的控件:TextView 124
5.1.2在TextView中显示URL及不同字体大小、不同颜色的文本 127
5.1.3带边框的TextView 128
5.1.4设置TextView控件的行间距 131
5.1.5输入文本的控件:EditText 132
5.1.6在EditText中输入特定的字符 134
5.1.7按回车键显示EditText 135
5.1.8自动完成输入内容的控件:AutoCompleteTextView 137
5.2按钮与复选框控件 138
5.2.1普通按钮控件:Button 138
5.2.2异形(圆形、五角星、螺旋形和箭头)按钮 139
5.2.3图像按钮控件:ImageButton 141
5.2.4同时显示图像和文字的按钮 141
5.2.5选项按钮控件:RadioButto 143
5.2.6开关状态按钮控件:ToggleButton 143
5.2.7复选框控件:CheckBox 144
5.2.8利用XML布局文件动态创建CheckBox 144
5.3日期与时间控件 147
5.3.1输入日期的控件:DatePicker 147
5.3.2输入时间的控件:TimePicker 148
5.3.3 DatePicker、TimePicker与TextView同步显示日期和时间 148
5.3.4显示时钟的控件:AnalogClock和DigitalClock 150
5.4进度条控件 150
5.4.1进度条控件:ProgressBar 150
5.4.2拖动条控件:SeekBar 152
5.4.3改变ProgressBar和SeekBar的颜色 154
5.4.4评分控件:RatingBar 155
5.5其他重要控件 156
5.5.1显示图像的控件:ImageView 157
5.5.2可显示图像指定区域的ImageView控件 158
5.5.3动态缩放和旋转图像 159
5.5.4列表控件:ListView 160
5.5.5可以单选和多选的ListView 163
5.5.6动态添加、删除ListView列表项 165
5.5.7改变ListView列表项选中状态的背景颜色 169
5.5.8封装ListView的Activity: ListActivity 169
5.5.9使用SimpleAdapter建立复杂的列表项 170
5.5.10给应用程序评分 172
5.5.11可展开的列表控件:ExpandableListView 175
5.5.12下拉列表控件:Spinner 178
5.5.13垂直滚动视图控件:ScrollView 179
5.5.14水平滚动视图控件:HorizontalScrollView 180
5.5.15 可垂直和水平滚动的视图 181
5.5.16网格视图控件:GridView 181
5.5.17可循环显示和切换图像的控件: Gallery和ImageSwitcher 183
5.5.18标签控件:TabHost 186
5.6小结 187
第6章 移动存储解决方案 188
6.1最简单的数据存储方式: SharedPreferences 188
6.1.1使用SharedPreferences存取数据 189
6.1.2数据的存储位置和格式 190
6.1.3存取复杂类型的数据 191
6.1.4设置数据文件的访问权限 194
6.1.5可以保存设置的Activity: PreferenceActivity 196
6.2文件的存储 199
6.2.1 openFileOutput和openFileInput方法 199
6.2.2 SD卡文件浏览器 201
6.2.3存取SD卡中的图像 205
6.2.4 SAX引擎读取XML文件的原理 208
6.2.5将XML数据转换成Java对象 208
6.3 SQLite数据库 212
6.3.1 SQLite数据库管理工具 212
6.3.2创建数据库和表 213
6.3.3模糊查询 215
6.3.4分页显示记录 215
6.3.5事务 215
6.4在Android中使用SQLite数据库 216
6.4.1 SQLiteOpenHelper类与自动升级数据库 216
6.4.2 SimpleCursorAdapter类与数据绑定 217
6.4.3带照片的联系人管理系统 220
6.4.4将数据库与应用程序一起发布 224
6.4.5英文词典 225
6.5持久化数据库引擎(db4o) 229
6.5.1什么是db4o 229
6.5.2下载和安装db4o 230
6.5.3创建和打开数据库 230
6.5.4向数据库中插入Java对象 230
6.5.5从数据库中查询Java对象 232
6.5.6高级数据查询 232
6.5.7更新数据库中的Java对象 233
6.5.8删除数据库中的Java对象 233
6.6小结 233
第7章 应用程序之间的通信 234
7.1 Intent与Activity 234
7.1.1用Intent启动Activity,并在Activiry 之间传递数据 235
7.1.2调用其他应用程序中的Activity(拨打电话、浏览网页、发E-mail等) 238
7.1.3定制自己的Activity Action 243
7.1.4将电子词典的查询功能共享成一个Activity Action 245
7.2接收和发送广播 247
7.2.1接收系统广播 247
7.2.2开机可自动运行的程序 248
7.2.3收到短信了,该做点什么 249
7.2.4显示手机电池的当前电量 251
7.2.5在自己的应用程序中发送广播 252
7.2.6接收联系人系统中发送的添加联系人广播 253
7.3小结 255
第8章Android服务 256
8.1 Service起步 256
8.1.1 Service的生命周期 257
8.1.2绑定Activity和Service 259
8.1.3在BroadcastReceiver中启动Service 262
8.2系统服务 264
8.2.1获得系统服务 264
8.2.2监听手机来电 265
8.2.3来电黑名单 267
8.2.4在模拟器上模拟重力感应 267
8.2.5手机翻转静音 270
8.3时间服务 272
8.3.1计时器:Chronometer 272
8.3.2预约时间:Handler 275
8.3.3定时器:Timer 276
8.3.4在线程中更新GUI组件 278
8.3.5全局定时器:AlarmManager 280
8.3.6定时更换壁纸 281
8.3.7多次定时提醒 284
8.4跨进程访问(AIDL服务) 287
8.4.1什么是AIDL服务 288
8.4.2建立AIDL服务的步骤 288
8.4.3建立AIDL服务 288
8.4.4传递复杂数据的AIDL服务 292
8.5小结 298
第9章 网络 299
9.1可装载网络数据的控件 300
9.1.1装载网络数据的原理 300
9.1.2将网络图像装载到ListView控件中 300
9.1.3 Google图像画廊(Gallery) 304
9.2 WebView控件 309
9.2.1用WebView控件浏览网页 309
9.2.2手机浏览器 309
9.2.3用WebView控件装载HTML代码 311
9.2.4将英文词典整合到Web页中(JavaScript调用Java方法) 312
9.3访问HTTP资源 315
9.3.1提交HTTP GET和HTTP POST请求 315
9.3.2 HttpURLConnection类 317
9.3.3上传文件 318
9.3.4远程Apk安装器 322
9.3.5调用WebService 323
9.3.6通过WebService查询产品信息 325
9.4 Intemet地址 329
9.4.1 Intemet地址概述 329
9.4.2创建InetAddress对象 331
9.4.3判断IP地址类型 333
9.5客户端Socket 335
9.5.1 Socket类基础 335
9.5.2多种连接服务端的方式 337
9.5.3客户端Socket的超时 339
9.5.4 Socket类的getter和setter方法 339
9.5.5 Socket的异常 346
9.6服务端Socket 347
9.6.1创建ServerSocket对象 347
9.6.2设置请求队列的长度 348
9.6.3绑定IP地址 349
9.6.4默认构造方法的使用 349
9.6.5读取和发送数据 350
9.6.6关闭连接 351
9.7小结 352
第10章 多媒体 353
10.1图形 353
10.1.1图形绘制基础 354
10.1.2绘制基本的图形和文本 356
10.1.3绘制位图 360
10.1.4用两种方式绘制位图 361
10.1.5设置颜色的透明度 362
10.1.6可任意改变透明度的位图 363
10.1.7旋转图像 365
10.1.8旋转动画 365
10.1.9扭曲图像 367
10.1.10按圆形轨迹扭曲图像 367
10.1.11拉伸图像 371
10.1.12拉伸图像演示 372
10.1.13路径 374
10.1.14沿着路径绘制文本 378
10.1.15 可在图像上绘制图形的画板 381
10.2音频和视频 387
10.2.1使用MediaPlayer播放MP3文件 387
10.2.2使用MediaRecorder录音 388
10.2.3使用VideoView播放视频 389
10.2.4使用SurfaceView播放视频 390
10.3小结 391
第三部分 进阶篇——深入Android世界的腹地 393
第11章2D动画 393
11.1帧(Frame)动画 393
11.1.1 AnimationDrawable与帧动画 394
11.1.2通过帧动画方式播放Gif动画 395
11.1.3播放帧动画的子集 399
11.2补间(Tween)动画 402
11.2.1移动补间动画 402
11.2.2循环向右移动的EditText与上下弹跳的球 404
11.2.3缩放补间动画 406
11.2.4跳动的心 407
11.2.5旋转补间动画 409
11.2.6旋转的星系 410
11.2.7透明度补间动画 411
11.2.8投掷炸弹 412
11.2.9振动效果 415
11.2.10自定义动画渲染器(Interceptor) 416
11.2.11以动画方式切换View的控件ViewFlipper 417
11.3小结 420
第12章OpenGL ES编程 421
12.1 OpenGL ES简介 421
12.2在3D空间中绘图 423
12.2.1要绘制3D图形了,第一步要做什么 423
12.2.2定义顶点 426
12.2.3绘制三角形 427
12.2.4三角形合并法绘制矩形 429
12.2.5顶点法绘制矩形 432
12.2.6顶点的选取顺序 433
12.2.7索引法绘制矩形 434
12.2.8基于OpenGL ES的动画原理 435
12.2.9旋转的矩形 436
12.3视图 437
12.3.1有趣的比喻:照相机拍照 438
12.3.2模型变换:立方体旋转 440
12.3.3用gluLookAt方法变换视图 444
12.4颜色 445
12.5小结 448
第13章 资源、国际化与自适应 449
13.1 Android中的资源 450
13.1.1 Android怎么存储资源 450
13.1.2资源的种类 450
13.1.3资源文件的命名 451
13.2定义和使用资源 451
13.2.1使用系统资源 452
13.2.2字符串(String)资源 453
13.2.3数组(Array)资源 455
13.2.4颜色(Color)资源 457
13.2.5尺寸(Dimension)资源 459
13.2.6类型(Style)资源 461
13.2.7主题(Theme)资源 462
13.2.8绘画(Drawable )资源 463
13.2.9动画(Animation)资源 465
13.2.10菜单(Menu)资源 465
13.2.11布局(Layout)资源 468
13.2.12属性(Attribute)资源 469
13.2.13改进可显示图标的IconTextView控件 471
13.2.14 XML资源 473
13.2.15 RAW资源 474
13.2.16 ASSETS资源 475
13.3国际化和资源自适应 476
13.3.1对资源进行国际化 476
13.3.2 Locale与国际化 478
13.3.3常用的资源配置 478
13.4小结 480
第14章 访问Android手机的硬件 481
14.1在手机上测试硬件 481
14.1.1安装Android USB驱动 482
14.1.2在手机上测试程序 483
14.1.3在手机上调试程序 484
14.2录音 485
14.3控制手机摄像头(拍照) 486
14.3.1调用系统的拍照功能 486
14.3.2实现自己的拍照Activity 488
14.4传感器在手机中的应用 494
14.4.1在应用程序中使用传感器 494
14.4.2电子罗盘 496
14.4.3计步器 497
14.5 GPS与地图定位 499
14.5.1 Google地图 499
14.5.2用GPS定位到当前位置 503
14.6 WIFI 505
14.7小结 507
第15章 放在桌面上的小玩意 508
15.1窗口小部件(App Widget) 508
15.1.1在Android桌面上添加App Widget 509
15.1.2开发App Widget的步骤 509
15.1.3数字时钟 512
15.1.4 App WidgetProvider类 515
15.1.5向App Widget添加配置Activity 515
15.1.6可以选择风格的数字时钟 516
15.2快捷方式 521
15.2.1向快捷方式列表中添加快捷方式 521
15.2.2直接将快捷方式放到桌面上 522
15.3实时文件夹(LiveFolder) 523
15.4小结 524
第16章NDK编程 525
16.1 Android NDK简介 525
16.2安装、配置和测试NDK开发环境 526
16.2.1系统和软件要求 526
16.2.2下载和安装Android NDK 527
16.2.3下载和安装Cygwin 527
16.2.4配置Android NDK的开发环境 531
16.2.5编译和运行NDK自带的例子 532
16.3 Android NDK开发 533
16.3.1 JNI接口设计 534
16.3.2编写Android NDK程序的步骤 535
16.3.3将文件中的小写字母转换成大写字母(NDK版本) 535
16.3.4配置Android.mk文件 538
16.3.5 Android NDK定义的变量 539
16.3.6 Android NDK定义的函数 540
16.3.7描述模块的变量 541
16.3.8配置Application.mk文件 542
16.4小结 543
第17章 整合Android与脚本语言 544
17.1 Android脚本环境简介 544
17.2 Android脚本环境安装 545
17.3编写和运行Android脚本 547
17.4小结 549
第18章 蓝牙技术 550
18.1蓝牙简介 550
18.2打开和关闭蓝牙设备 551
18.3搜索蓝牙设备 552
18.4蓝牙数据传输 555
18.5蓝牙通讯一定需要UUID吗 558
18.6小结 559
第19章 有趣的Android技术 560
19.1手势(Gesture) 560
19.1.1创建手势文件 561
19.1.2通过手势输入字符串 561
19.1.3通过手势调用程序 563
19.1.4编写自己的手势创建器 565
19.2让手机说话(TTS) 567
19.3动态壁纸 568
19.4小结 577
第四部分 综合实例篇——实践是检验真理的唯一标准 579
第20章 万年历 579
20.1主界面设计与实现 579
20.1.1万年历的核心类:Calendar 580
20.1.2日历内容元素的基类: CalendarParent 581
20.1.3绘制万年历边框:Border类 582
20.1.4绘制周名称:Week类 583
20.1.5绘制日期和网格:Grid类 584
20.1.6日历视图:CalendarView类 592
20.1.7生成万年历的主界面 596
20.2选项菜单功能 596
20.2.1切换到今天的日期 596
20.2.2指定日期 597
20.3可以写日记和提醒的万年历 599
20.3.1显示所有的记录信息: AllRecord类 599
20.3.2添加和修改记录:Record类 601
20.3.3设置提醒时间 603
20.3.4启动服务 604
20.3.5在广播接收器中显示提醒界面 605
20.3.6访问数据库:DBService 607
20.4小结 611
第21章 知道当前位置的Google GTalk 机器人 612
21.1 GTalk的通讯协议和技术 612
21.1.1 Jabber和XMPP 612
21.1.2 XMPP客户端库:Smack和 Asmack 613
21.2登录GTalk: Login类 614
21.3联系人信息 616
21.3.1显示联系人列表 616
21.3.2监听联系人是否上线 618
21.4联系人之间的通讯 620
21.4.1发送聊天信息 621
21.4.2接收聊天信息 622
21.4.3自动回复当前的位置 (GPS定位) 625
21.5小结 627
第22章Android 4.x支持的新技术 628
22.1 Android 4.x的10大特性 628
22.2子窗口:Fragments 629
22.2.1 Fragments的设计原理 630
22.2.2创建Fragment 630
22.2.3建立一个用户界面 632
22.2.4将Fragment添加到Activity中 633
22.2.5处理Fragment事务 634
22.3.6与Activity通信 635
22.3动作栏:Action Bar 637
22.3.1添加Action Bar 637
22.3.2移除Action Bar 637
22.3.3添加Action Item 638
22.3.4将应用图标用作菜单项目 639
22.4小结 639