目 錄
第1章 Android簡介 1
1.1 一些背景信息 2
1.1.1 不遠的過去 2
1.1.2 未來的前景 2
1.2 對Android的誤解 3
1.3 Android:開放的移動開發平颱 3
1.4 原生Android應用程序 4
1.5 Android SDK的特徵 5
1.5.1 訪問硬件(包括攝像頭、GPS和
傳感器) 5
1.5.2 使用Wi-Fi、藍牙技術和NFC
進行數據傳輸 6
1.5.3 地圖、地理編碼和基於位置的
服務 6
1.5.4 後颱服務 6
1.5.5 使用SQLite數據庫進行數據
存儲和檢索 7
1.5.6 共享數據和應用程序間通信 7
1.5.7 使用Widget和Live Wallpaper
增強主屏幕 7
1.5.8 廣泛的媒體支持和2D/3D圖形 7
1.5.9 Cloud to Device Messaging 8
1.5.10 優化的內存和進程管理 8
1.6 開放手機聯盟簡介 8
1.7 運行Android的環境 9
1.8 從事移動開發的原因 9
1.9 從事Android開發的原因 9
1.9.1 推動Android普及的因素 10
1.9.2 Android的獨到之處 10
1.9.3 改變移動開發格局 11
1.10 開發框架簡介 11
1.10.1 開發包中的資源 12
1.10.2 理解Android軟件棧 12
1.10.3 Dalvik虛擬機 14
1.10.4 Android應用程序架構 14
1.10.5 Android庫 15
第2章 開始入手 17
2.1 Android開發 18
2.1.1 開始前的準備工作 18
2.1.2 創建第一個Android應用程序 24
2.1.3 Android應用程序的類型 31
2.2 麵嚮移動設備和嵌入式設備的
開發 32
2.2.1 硬件限製帶來的設計考慮事項 32
2.2.2 考慮用戶環境 35
2.2.3 Android開發 36
2.3 Android開發工具 40
2.3.1 Android虛擬設備管理器 41
2.3.2 Android SDK管理器 42
2.3.3 Android模擬器 42
2.3.4 Dalvik調試監控服務(DDMS) 42
2.3.5 Android調試橋(ADB) 43
2.3.6 Hierarchy Viewer和Lint工具 43
2.3.7 Monkey和Monkey Runner 43
第3章 創建應用程序和Activity 45
3.1 Android應用程序的組成部分 46
3.2 應用程序Manifest文件簡介 47
3.3 使用Manifest編輯器 54
3.4 分離資源 55
3.4.1 創建資源 55
3.4.2 使用資源 63
3.4.3 為不同的語言和硬件創建
資源 66
3.4.4 運行時配置更改 68
3.5 Android應用程序生命周期 70
3.6 理解應用程序的優先級和進程
狀態 70
3.7 Android Application類簡介 72
3.7.1 擴展和使用Application類 72
3.7.2 重寫應用程序的生命周期
事件 73
3.8 深入探討Android Activity 74
3.8.1 創建Activity 74
3.8.2 Activity的生存期 76
3.8.3 Android Activity類 81
第4章 創建用戶界麵 83
4.1 Android UI基本設計 84
4.2 Android UI的基礎知識 84
4.3 布局簡介 85
4.3.1 定義布局 86
4.3.2 使用布局創建設備無關的UI 87
4.3.3 優化布局 90
4.4 To-Do List示例 93
4.5 Fragment介紹 100
4.5.1 創建新的Fragment 101
4.5.2 Fragment的生命周期 101
4.5.3 Fragment Manager介紹 105
4.5.4 嚮Activity中添加Fragment 105
4.5.5 Fragment和Activity之間的
接口 110
4.5.6 沒有用戶界麵的Fragment 111
4.5.7 Android Fragment 類 112
4.5.8 對To-Do List示例使用
Fragment 112
4.6 Android widget 工具箱 116
4.7 創建新視圖 117
4.7.1 修改現有的視圖 118
4.7.2 創建復閤控件 122
4.7.3 使用布局創建簡單的復閤
控件 124
4.7.4 創建定製的視圖 124
4.7.5 使用定製的控件 137
4.8 Adapter簡介 137
4.8.1 部分原生Adapter簡介 138
4.8.2 定製ArrayAdapter 138
4.8.3 使用Adapter綁定數據到
視圖 139
第5章 Intent和Broadcast Receiver 145
5.1 Intent簡介 145
5.1.1 使用Intent來啓動Activity 146
5.1.2 Linkify簡介 153
5.1.3 使用Intent廣播事件 155
5.1.4 Local Broadcast Manager 159
5.1.5 Pending Intent簡介 160
5.2 創建Intent Filter和Broadcast
Receiver 161
5.2.1 使用Intent Filter為隱式Intent
提供服務 161
5.2.2 使用Intent Filter作為插件和
擴展 170
5.2.3 監聽本地Broadcast Intent 173
5.2.4 使用Broadcast Intent監控設備的
狀態變化 174
5.2.5 在運行時管理Manifest
Receiver 176
第6章 使用Internet資源 177
6.1 下載和分析Internet資源 177
6.1.1 連接Internet資源 178
6.1.2 使用XML Pull Parser分析
XML 179
6.1.3 創建一個地震查看器 180
6.2 使用Download Manager 186
6.2.1 下載文件 186
6.2.2 自定義Download Manager
Notification 187
6.2.3 指定下載位置 188
6.2.4 取消和刪除下載 189
6.2.5 查詢Download Manager 189
6.3 使用Internet服務 192
6.4 連接到Google App Engine 192
6.5 下載數據而不會耗盡電量的
最佳實踐 194
第7章 文件、保存狀態和首選項 195
7.1 保存簡單的應用程序數據 195
7.2 創建並保存Shared Preference 196
7.3 檢索Shared Preference 197
7.4 為地震查看器創建一個設置
Activity 197
7.5 首選項框架和Preference Activity
概述 205
7.5.1 在XML中定義一個
Preference Screen布局 206
7.5.2 Preference Fragment簡介 208
7.5.3 使用Preference Header定義
Preference Fragment的層次
結構 208
7.5.4 Preference Activity簡介 209
7.5.5 嚮後兼容性與Preference
Screen 210
7.5.6 找到並使用Preference Screen
設置的Shared Preference 210
7.5.7 Shared Preference Change
Listener簡介 211
7.6 為地震查看器創建一個標準的
Preference Activity 211
7.7 持久化應用程序實例的狀態 215
7.7.1 使用Shared Preference保存
Activity狀態 215
7.7.2 使用生命周期處理程序保存和
還原Activity實例 215
7.7.3 使用生命周期處理程序保存和
還原Fragment實例狀態 216
7.8 將靜態文件作為資源添加 218
7.9 在文件係統下工作 218
7.9.1 文件管理工具 218
7.9.2 使用特定於應用程序的文件夾
存儲文件 219
7.9.3 創建私有的應用程序文件 219
7.9.4 使用應用程序文件緩存 220
7.9.5 存儲公共可讀的文件 220
第8章 數據庫和Content Provider 223
8.1 Android數據庫簡介 223
8.1.1 SQLite數據庫簡介 224
8.1.2 Content Provider簡介 224
8.2 SQLite簡介 224
8.3 Content Value和Cursor 225
8.4 使用SQLite數據庫 225
8.4.1 SQLiteOpenHelper簡介 226
8.4.2 在不使用SQLiteOpenHelper的
情況下打開和創建數據庫 228
8.4.3 Android數據庫設計注意
事項 228
8.4.4 查詢數據庫 228
8.4.5 從Cursor中提取值 229
8.4.6 添加、更新和刪除行 230
8.5 創建Content Provider 232
8.5.1 注冊Content Provider 233
8.5.2 發布Content Provider的URI
地址 233
8.5.3 創建Content Provide的
數據庫 234
8.5.4 實現Content Provider查詢 235
8.5.5 Content Provider事務 236
8.5.6 在Content Provider中存儲
文件 239
8.5.7 一個Content Provider的實現
框架 240
8.6 使用Content Provider 244
8.6.1 Content Resolver簡介 244
8.6.2 查詢Content Provider 244
8.6.3 使用Cursor Loader異步查詢
內容 247
8.6.4 添加、刪除和更新內容 249
8.6.5 訪問Content Provider中存儲的
文件 251
8.6.6 創建一個To-Do List數據庫和
Content Provider 253
8.7 將搜索功能添加到應用程序中 260
8.7.1 使Content Provider可搜索 261
8.7.2 為應用程序創建一個搜索
Activity 261
8.7.3 將搜索Activity設置為應用
程序的默認搜索Provider 263
8.7.4 使用搜索視圖微件 266
8.7.5 由Content Provider支持搜索
建議 267
8.7.6 在快速搜索框中顯示搜索
結果 270
8.8 創建可搜索的地震Content
Provider 270
8.8.1 創建Content Provider 270
8.8.2 使用地震Content Provider 276
8.8.3 搜索EarthquakeContent
Provider 279
8.9 本地Android Content Provider 285
8.9.1 使用Media StoreContent
Provider 285
8.9.2 使用Contacts Contract Content
Provider 286
8.9.3 使用Calendar Content
Provider 293
第9章 在後颱操作 297
9.1 Service簡介 298
9.1.1 創建和控製Service 298
9.1.2 將Service綁定到Activity 302
9.1.3 地震監控Service示例 304
9.1.4 創建前颱Service 308
9.2 使用後颱綫程 309
9.2.1 使用AsyncTask運行異步任務 310
9.2.2 Intent Service簡介 312
9.2.3 Loader簡介 313
9.2.4 手動創建綫程和GUI綫程
同步 313
9.3 使用Alarm 315
9.3.1 創建、設置和取消Alarm 316
9.3.2 設置重復Alarm 317
9.3.3 使用重復Alarm調度網絡
刷新 318
9.4 使用Intent Service簡化Earthquake
更新Service 320
第10章 擴展用戶體驗 323
10.1 操作欄簡介 324
10.1.1 自定義操作欄 325
10.1.2 自定義操作欄來控製應用
程序的導航行為 328
10.1.3 操作欄操作簡介 333
10.2 嚮地震監控程序添加一個
操作欄 333
10.3 創建並使用菜單和操作欄
操作項 339
10.3.1 Android菜單係統簡介 340
10.3.2 創建菜單 341
10.3.3 指定操作欄的操作 342
10.3.4 菜單項選項 343
10.3.5 添加操作View和操作提供
程序 344
10.3.6 在Fragment中添加菜單項 345
10.3.7 使用XML定義菜單層次
結構 345
10.3.8 動態更新菜單項 347
10.3.9 處理菜單選擇 347
10.3.10 子菜單和上下文菜單簡介 348
10.4 更新地震監控程序 351
10.5 全屏顯示 353
10.6 對話框簡介 355
10.6.1 創建一個對話框 356
10.6.2 使用AlertDialog類 356
10.6.3 使用專門的輸入對話框 357
10.6.4 通過Dialog Fragment管理和
顯示對話框 358
10.6.5 通過Activity事件處理程序
管理和顯示對話框 360
10.6.6 將Activity用作對話框 361
10.7 創建Toast 361
10.7.1 自定義Toast 362
10.7.2 在工作綫程中使用Toast 364
10.8 Notification簡介 365
10.8.1 Notification Manager簡介 366
10.8.2 創建Notification 366
10.8.3 設置和自定義通知托盤UI 369
10.8.4 配置持續和連續的
Notification 373
10.8.5 觸發、更新和取消
Notification 374
10.9 嚮地震監控程序中添加
Notification和對話框 376
第11章 高級用戶體驗 381
11.1 為每個屏幕尺寸和分辨率做
設計 382
11.1.1 分辨率無關 382
11.1.2 為不同的屏幕大小提供支持和
優化 383
11.1.3 創建可縮放的圖形資源 386
11.1.4 創建優化的、自適應的、
動態的設計 390
11.1.5 反復測試 390
11.2 確保可訪問性 391
11.2.1 為非觸屏設備提供導航 391
11.2.2 為每個View提供文本
描述 391
11.3 Android Text-to-Speech簡介 392
11.4 使用語音識彆 394
11.4.1 使用語音識彆進行語音
輸入 395
11.4.2 使用語音識彆進行搜索 396
11.5 控製設備振動 396
11.6 使用動畫 397
11.6.1 補間View動畫 397
11.6.2 創建和使用逐幀動畫 400
11.6.3 插值屬性動畫 400
11.7 強化View 404
11.7.1 高級Canvas繪圖 404
11.7.2 硬件加速 419
11.7.3 Surface View簡介 420
11.7.4 創建交互式控件 423
11.8 高級Drawable資源 428
11.9 復製、粘貼和剪貼闆 431
11.9.1 嚮剪貼闆中復製數據 431
11.9.2 粘貼剪貼闆數據 431
第12章 硬件傳感器 433
12.1 使用傳感器和傳感器
管理器 433
12.1.1 受支持的Android傳感器 434
12.1.2 虛擬傳感器簡介 435
12.1.3 查找傳感器 435
12.1.4 監視傳感器 436
12.1.5 解釋傳感器值 438
12.2 監視設備的移動和方嚮 439
12.2.1 確定設備的自然方嚮 440
12.2.2 加速計簡介 441
12.2.3 檢測加速度變化 442
12.2.4 創建一個重力計 443
12.2.5 確定設備方嚮 446
12.2.6 創建一個指南針和人工
地平儀 450
12.2.7 陀螺儀傳感器簡介 453
12.3 環境傳感器簡介 454
12.3.1 使用氣壓計傳感器 454
12.3.2 創建氣象站 455
第13章 地圖、地理編碼和基於位置的
服務 461
13.1 使用基於位置的服務 461
13.2 在模擬器中使用基於位置的
服務 462
13.2.1 更新模擬器位置提供器中的
位置 463
13.2.2 配置模擬器來測試基於位置的
服務 463
13.3 選擇一個位置提供器 464
13.3.1 查找位置提供器 464
13.3.2 通過指定條件查找位置
提供器 464
13.3.3 確定位置提供器的能力 465
13.4 確定當前位置 466
13.4.1 位置的隱私性 466
13.4.2 找齣上一次確定的位置 466
13.4.3 Where Am I示例 466
13.4.4 刷新當前位置 469
13.4.5 在Where Am I中跟蹤
位置 472
13.4.6 請求單獨一次位置更新 473
13.5 位置更新的最佳實踐 474
13.6 使用近距離提醒 477
13.7 使用地理編碼器 478
13.7.1 反嚮地理編碼 479
13.7.2 前嚮地理編碼 480
13.7.3 對“Where Am I”示例
進行地理編碼 481
13.8 創建基於地圖的Activity 482
13.8.1 MapView和MapActivity
簡介 482
13.8.2 獲得地圖的API key 483
13.8.3 創建一個基於地圖的
Activity 483
13.8.4 地圖和Fragment 485
13.8.5 配置和使用MapView 486
13.8.6 使用MapController 486
13.8.7 對“Where Am I”示例使用
地圖 487
13.8.8 創建和使用覆蓋(Overlay) 490
13.8.9 MyLocationOverlay簡介 497
13.8.10 ItemizedOverlay和
OverlayItem簡介 498
13.8.11 將視圖固定到地圖和地圖的
某個位置上 500
13.9 對Earthquake示例添加地圖
功能 501
第14章 個性化主屏幕 507
14.1 主屏幕Widget簡介 507
14.2 創建App Widgets 509
14.2.1 創建Widget的XML
布局資源 509
14.2.2 定義Widget設置 511
14.2.3 創建Widget Broadcast Receiver
並將其添加到應用程序的
manifest文件中 512
14.2.4 AppWidgetManager和
RemoteView簡介 513
14.2.5 刷新Widget 518
14.2.6 創建並使用Widget配置
Activity 521
14.3 創建地震Widget 522
14.4 Collection View Widget簡介 528
14.4.1 創建Collection View Widget的
布局 529
14.4.2 創建RemoteViewsService 530
14.4.3 創建一個RemoteViews-
Factory 531
14.4.4 使用RemoteViewsService
填充CollectionViewWidget 533
14.4.5 嚮Collection View Widget
中的項添加交互性 534
14.4.6 將Collection View Widget
綁定到Content Provider 535
14.4.7 刷新Collection View
Widget 537
14.4.8 創建Earthquake Collection
View Widget 537
14.5 Live Folder簡介 543
14.5.1 創建Live Folder 544
14.5.2 創建Earthquake Live Folder 548
14.6 使用快速搜索框顯示應用程序
搜索結果 551
14.6.1 在快速搜索框中顯示搜索
結果 551
14.6.2 將Earthquake示例的搜索
結果添加到快速搜索框中 552
14.7 創建Live Wallpaper 553
14.7.1 創建Live Wallpaper定義
資源 553
14.7.2 創建Wallpaper Service 554
14.7.3 創建Wallpaper Service
引擎 555
第15章 音頻、視頻以及攝像頭的
使用 557
15.1 播放音頻和視頻 558
15.1.1 Media Player簡介 559
15.1.2 準備音頻播放 559
15.1.3 準備視頻播放 560
15.1.4 控製Media Player的
播放 564
15.1.5 管理媒體播放輸齣 566
15.1.6 響應音量控製 566
15.1.7 響應Media播放控件 567
15.1.8 請求和管理音頻焦點 569
15.1.9 當音頻輸齣改變時暫停
播放 571
15.1.10 Remote Control Client簡介 572
15.2 操作原始音頻 574
15.2.1 使用AudioRecord錄製
聲音 574
15.2.2 使用AudioTrack播放音頻 575
15.3 創建一個Sound Pool 577
15.4 使用音效 578
15.5 使用攝像頭拍攝照片 579
15.5.1 使用Intent拍攝照片 579
15.5.2 直接控製攝像頭 581
15.5.3 讀取並寫入 JPEG EXIF圖像
詳細信息 588
15.6 錄製視頻 589
15.6.1 使用Intent錄製視頻 589
15.6.2 使用MediaRecorder錄製
視頻 590
15.7 使用媒體效果 593
15.8 嚮媒體庫中添加新媒體 594
15.8.1 使用媒體掃描儀插入媒體 594
15.8.2 手動插入媒體 595
第16章 藍牙、NFC、網絡和Wi-Fi 597
16.1 使用藍牙 597
16.1.1 管理本地藍牙設備適配器 598
16.1.2 可發現性和遠程設備發現 600
16.1.3 藍牙通信 604
16.2 管理網絡和Internet連接 609
16.2.1 Connectivity Manager簡介 609
16.2.2 支持用戶首選項以進行後颱
數據傳輸 609
16.2.3 查找和監視網絡連接 611
16.3 管理Wi-Fi 612
16.3.1 監視Wi-Fi連接 613
16.3.2 監視活動的Wi-Fi連接的
詳細信息 613
16.3.3 掃描熱點 613
16.3.4 管理Wi-Fi配置 614
16.3.5 創建Wi-Fi網絡配置 615
16.4 使用Wi-Fi Direct傳輸數據 615
16.4.1 初始化Wi-Fi Direct框架 615
16.4.2 啓用Wi-Fi Direct並監視其
狀態 617
16.4.3 發現對等設備 618
16.4.4 連接對等設備 618
16.4.5 在對等設備之間傳輸數據 620
16.5 近場通信 621
16.5.1 讀取NFC標簽 622
16.5.2 使用前颱分派係統 623
16.5.3 Android Beam簡介 625
第17章 電話服務和SMS 629
17.1 電話服務的硬件支持 629
17.1.1 將電話功能指定為必需的
硬件功能 629
17.1.2 檢查電話硬件 630
17.2 使用電話服務 630
17.2.1 啓動電話呼叫 630
17.2.2 替換本機撥號程序 631
17.2.3 訪問電話服務的屬性及狀態 632
17.2.4 使用PhoneStateListener
監視電話狀態的變化 635
17.2.5 使用Intent Receiver監視傳入的
電話呼叫 639
17.3 SMS和MMS簡介 640
17.3.1 在應用程序中使用SMS和
MMS 640
17.3.2 使用Intent從應用程序中
發送SMS和MMS 640
17.3.3 使用SMS Manager發送
SMS消息 641
17.3.4 監聽傳入的SMS消息 644
17.3.5 緊急響應程序SMS示例 646
17.3.6 自動緊急響應程序 654
17.4 SIP和VOIP簡介 662
第18章 Android高級開發 663
18.1 Android的安全性 664
18.1.1 Linux內核安全 664
18.1.2 權限簡介 664
18.2 Cloud to Device Messaging簡介 666
18.2.1 C2DM的局限性 667
18.2.2 注冊使用C2DM 667
18.2.3 在C2DM服務器上注冊
設備 667
18.2.4 嚮設備發送C2DM消息 670
18.2.5 接收C2DM消息 672
18.3 使用License Verification Library
實現版權保護 673
18.3.1 安裝License Verification
Library 673
18.3.2 獲得License Verification
公鑰 673
18.3.3 配置License Validation
Policy 674
18.3.4 執行許可驗證檢查 674
18.4 應用程序內收費 675
18.4.1 應用程序內收費的局限性 676
18.4.2 安裝IAB庫 676
18.4.3 獲得公鑰和定義可購買的
物品 676
18.4.4 開始IAB交易 677
18.4.5 處理IAB購買請求的響應 678
18.5 使用Wake Lock 679
18.6 使用AIDL支持Service的
IPC 680
18.7 處理不同硬件和軟件的可用性 686
18.7.1 指定硬件的要求 686
18.7.2 確認硬件可用性 687
18.7.3 構建嚮後兼容的應用程序 687
18.8 利用STRICT模式優化UI
性能 689
第19章 推廣和發布應用程序並從中
獲利 691
19.1 簽名和發布應用程序 691
19.2 發布應用程序 693
19.2.1 Google Play簡介 693
19.2.2 開始使用Google Play 694
19.2.3 發布應用程序 695
19.2.4 開發者控製颱上的應用程序
報告 697
19.2.5 查看應用程序錯誤報告 697
19.3 如何通過應用程序賺錢 698
19.4 應用程序銷售、推廣和分發的
策略 699
19.4.1 應用程序的起步策略 699
19.4.2 在Google Play上推廣 700
19.4.3 國際化 700
19.5 分析數據和跟蹤推薦人 701
19.5.1 使用移動應用程序的Google
Analytics 702
19.5.2 使用Google Analytics追蹤
推薦 703
· · · · · · (
收起)