圖書簡介
《Android 4高級編程(第3版)》由Android權威專家編寫,涵蓋了所有最新的內容,是學習使用Android 4 SDK開發移動應用程式的理想指南。本書見解深刻,幫助經驗豐富的Android開發人員充分挖掘Android 4的新特性的潛力,同時講解了Android開發的基礎知識,使初學者也可以藉助本書入門。作為一本以實用性為目的的指導圖書,本書帶領您逐步完成複雜程度越來越高的Android項目,每個項目中都引入一種新的Android平台特性,並著重指出有助於編寫引人入勝的應用程式的技術和最佳實踐。
目錄
第1章Android簡介 1
1.1一些背景信息 2
1.1.1不遠的過去 2
1.1.2未來的前景 2
1.2對Android的誤解 3
1.3Android:開放的移動開發平台 3
1.4原生Android應用程式 4
1.5AndroidSDK的特徵 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和LiveWallpaper
增強主螢幕 7
1.5.8廣泛的媒體支持和2D/3D圖形 7
1.5.9CloudtoDeviceMessaging 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.2Android的獨到之處 10
1.9.3改變移動開發格局 11
1.10開發框架簡介 11
1.10.1開發包中的資源 12
1.10.2理解Android軟體棧 12
1.10.3Dalvik虛擬機 14
1.10.4Android應用程式架構 14
1.10.5Android庫 15
第2章開始入手 17
2.1Android開發 18
2.1.1開始前的準備工作 18
2.1.2創建第一個Android應用程式 24
2.1.3Android應用程式的類型 31
2.2面向移動設備和嵌入式設備的
開發 32
2.2.1硬體限制帶來的設計考慮事項 32
2.2.2考慮用戶環境 35
2.2.3Android開發 36
2.3Android開發工具 40
2.3.1Android虛擬設備管理器 41
2.3.2AndroidSDK管理器 42
2.3.3Android模擬器 42
2.3.4Dalvik調試監控服務(DDMS) 42
2.3.5Android調試橋(ADB) 43
2.3.6HierarchyViewer和Lint工具 43
2.3.7Monkey和MonkeyRunner 43
第3章創建應用程式和Activity 45
3.1Android應用程式的組成部分 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.5Android應用程式生命周期 70
3.6理解應用程式的優先權和進程
狀態 70
3.7AndroidApplication類簡介 72
3.7.1擴展和使用Application類 72
3.7.2重寫應用程式的生命周期
事件 73
3.8深入探討AndroidActivity 74
3.8.1創建Activity 74
3.8.2Activity的生存期 76
3.8.3AndroidActivity類 81
第4章創建用戶界面 83
4.1AndroidUI基本設計 84
4.2AndroidUI的基礎知識 84
4.3布局簡介 85
4.3.1定義布局 86
4.3.2使用布局創建設備無關的UI 87
4.3.3最佳化布局 90
4.4To-DoList示例 93
4.5Fragment介紹 100
4.5.1創建新的Fragment 101
4.5.2Fragment的生命周期 101
4.5.3FragmentManager介紹 105
4.5.4向Activity中添加Fragment 105
4.5.5Fragment和Activity之間的
接口 110
4.5.6沒有用戶界面的Fragment 111
4.5.7AndroidFragment類 112
4.5.8對To-DoList示例使用
Fragment 112
4.6Androidwidget工具箱 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.8Adapter簡介 137
4.8.1部分原生Adapter簡介 138
4.8.2定製ArrayAdapter 138
4.8.3使用Adapter綁定數據到
視圖 139
第5章Intent和BroadcastReceiver 145
5.1Intent簡介 145
5.1.1使用Intent來啟動Activity 146
5.1.2Linkify簡介 153
5.1.3使用Intent廣播事件 155
5.1.4LocalBroadcastManager 159
5.1.5PendingIntent簡介 160
5.2創建IntentFilter和Broadcast
Receiver 161
5.2.1使用IntentFilter為隱式Intent
提供服務 161
5.2.2使用IntentFilter作為外掛程式和
擴展 170
5.2.3監聽本地BroadcastIntent 173
5.2.4使用BroadcastIntent監控設備的
狀態變化 174
5.2.5在運行時管理Manifest
Receiver 176
第6章使用Internet資源 177
6.1下載和分析Internet資源 177
6.1.1連線Internet資源 178
6.1.2使用XMLPullParser分析
XML 179
6.1.3創建一個地震查看器 180
6.2使用DownloadManager 186
6.2.1下載檔案 186
6.2.2自定義DownloadManager
Notification 187
6.2.3指定下載位置 188
6.2.4取消和刪除下載 189
6.2.5查詢DownloadManager 189
6.3使用Internet服務 192
6.4連線到GoogleAppEngine 192
6.5下載數據而不會耗盡電量的
最佳實踐 194
第7章檔案、保存狀態和首選項 195
7.1保存簡單的應用程式數據 195
7.2創建並保存SharedPreference 196
7.3檢索SharedPreference 197
7.4為地震查看器創建一個設定
Activity 197
7.5首選項框架和PreferenceActivity
概述 205
7.5.1在XML中定義一個
PreferenceScreen布局 206
7.5.2PreferenceFragment簡介 208
7.5.3使用PreferenceHeader定義
PreferenceFragment的層次
結構 208
7.5.4PreferenceActivity簡介 209
7.5.5向後兼容性與Preference
Screen 210
7.5.6找到並使用PreferenceScreen
設定的SharedPreference 210
7.5.7SharedPreferenceChange
Listener簡介 211
7.6為地震查看器創建一個標準的
PreferenceActivity 211
7.7持久化應用程式實例的狀態 215
7.7.1使用SharedPreference保存
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章資料庫和ContentProvider 223
8.1Android資料庫簡介 223
8.1.1SQLite資料庫簡介 224
8.1.2ContentProvider簡介 224
8.2SQLite簡介 224
8.3ContentValue和Cursor 225
8.4使用SQLite資料庫 225
8.4.1SQLiteOpenHelper簡介 226
8.4.2在不使用SQLiteOpenHelper的
情況下打開和創建資料庫 228
8.4.3Android資料庫設計注意
事項 228
8.4.4查詢資料庫 228
8.4.5從Cursor中提取值 229
8.4.6添加、更新和刪除行 230
8.5創建ContentProvider 232
8.5.1註冊ContentProvider 233
8.5.2發布ContentProvider的URI
地址 233
8.5.3創建ContentProvide的
資料庫 234
8.5.4實現ContentProvider查詢 235
8.5.5ContentProvider事務 236
8.5.6在ContentProvider中存儲
檔案 239
8.5.7一個ContentProvider的實現
框架 240
8.6使用ContentProvider 244
8.6.1ContentResolver簡介 244
8.6.2查詢ContentProvider 244
8.6.3使用CursorLoader異步查詢
內容 247
8.6.4添加、刪除和更新內容 249
8.6.5訪問ContentProvider中存儲的
檔案 251
8.6.6創建一個To-DoList資料庫和
ContentProvider 253
8.7將搜尋功能添加到應用程式中 260
8.7.1使ContentProvider可搜尋 261
8.7.2為應用程式創建一個搜尋
Activity 261
8.7.3將搜尋Activity設定為套用
程式的默認搜尋Provider 263
8.7.4使用搜尋視圖微件 266
8.7.5由ContentProvider支持搜尋
建議 267
8.7.6在快速搜尋框中顯示搜尋
結果 270
8.8創建可搜尋的地震Content
Provider 270
8.8.1創建ContentProvider 270
8.8.2使用地震ContentProvider 276
8.8.3搜尋EarthquakeContent
Provider 279
8.9本地AndroidContentProvider 285
8.9.1使用MediaStoreContent
Provider 285
8.9.2使用ContactsContractContent
Provider 286
8.9.3使用CalendarContent
Provider 293
第9章在後台操作 297
9.1Service簡介 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.2IntentService簡介 312
9.2.3Loader簡介 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使用IntentService簡化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.1Android選單系統簡介 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通過DialogFragment管理和
顯示對話框 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.8Notification簡介 365
10.8.1NotificationManager簡介 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.3AndroidText-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.3SurfaceView簡介 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.3WhereAmI示例 466
13.4.4刷新當前位置 469
13.4.5在WhereAmI中跟蹤
位置 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對“WhereAmI”示例
進行地理編碼 481
13.8創建基於地圖的Activity 482
13.8.1MapView和MapActivity
簡介 482
13.8.2獲得地圖的APIkey 483
13.8.3創建一個基於地圖的
Activity 483
13.8.4地圖和Fragment 485
13.8.5配置和使用MapView 486
13.8.6使用MapController 486
13.8.7對“WhereAmI”示例使用
地圖 487
13.8.8創建和使用覆蓋(Overlay) 490
13.8.9MyLocationOverlay簡介 497
13.8.10ItemizedOverlay和
OverlayItem簡介 498
13.8.11將視圖固定到地圖和地圖的
某個位置上 500
13.9對Earthquake示例添加地圖
功能 501
第14章個性化主螢幕 507
14.1主螢幕Widget簡介 507
14.2創建AppWidgets 509
14.2.1創建Widget的XML
布局資源 509
14.2.2定義Widget設定 511
14.2.3創建WidgetBroadcastReceiver
並將其添加到應用程式的
manifest檔案中 512
14.2.4AppWidgetManager和
RemoteView簡介 513
14.2.5刷新Widget 518
14.2.6創建並使用Widget配置
Activity 521
14.3創建地震Widget 522
14.4CollectionViewWidget簡介 528
14.4.1創建CollectionViewWidget的
布局 529
14.4.2創建RemoteViewsService 530
14.4.3創建一個RemoteViews-
Factory 531
14.4.4使用RemoteViewsService
填充CollectionViewWidget 533
14.4.5向CollectionViewWidget
中的項添加互動性 534
14.4.6將CollectionViewWidget
綁定到ContentProvider 535
14.4.7刷新CollectionView
Widget 537
14.4.8創建EarthquakeCollection
ViewWidget 537
14.5LiveFolder簡介 543
14.5.1創建LiveFolder 544
14.5.2創建EarthquakeLiveFolder 548
14.6使用快速搜尋框顯示應用程式
搜尋結果 551
14.6.1在快速搜尋框中顯示搜尋
結果 551
14.6.2將Earthquake示例的搜尋
結果添加到快速搜尋框中 552
14.7創建LiveWallpaper 553
14.7.1創建LiveWallpaper定義
資源 553
14.7.2創建WallpaperService 554
14.7.3創建WallpaperService
引擎 555
第15章音頻、視頻以及攝像頭的
使用 557
15.1播放音頻和視頻 558
15.1.1MediaPlayer簡介 559
15.1.2準備音頻播放 559
15.1.3準備視頻播放 560
15.1.4控制MediaPlayer的
播放 564
15.1.5管理媒體播放輸出 566
15.1.6回響音量控制 566
15.1.7回響Media播放控制項 567
15.1.8請求和管理音頻焦點 569
15.1.9當音頻輸出改變時暫停
播放 571
15.1.10RemoteControlClient簡介 572
15.2操作原始音頻 574
15.2.1使用AudioRecord錄製
聲音 574
15.2.2使用AudioTrack播放音頻 575
15.3創建一個SoundPool 577
15.4使用音效 578
15.5使用攝像頭拍攝照片 579
15.5.1使用Intent拍攝照片 579
15.5.2直接控制攝像頭 581
15.5.3讀取並寫入JPEGEXIF圖像
詳細信息 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.1ConnectivityManager簡介 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-FiDirect傳輸數據 615
16.4.1初始化Wi-FiDirect框架 615
16.4.2啟用Wi-FiDirect並監視其
狀態 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.3AndroidBeam簡介 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使用IntentReceiver監視傳入的
電話呼叫 639
17.3SMS和MMS簡介 640
17.3.1在應用程式中使用SMS和
MMS 640
17.3.2使用Intent從應用程式中
傳送SMS和MMS 640
17.3.3使用SMSManager傳送
SMS訊息 641
17.3.4監聽傳入的SMS訊息 644
17.3.5緊急回響程式SMS示例 646
17.3.6自動緊急回響程式 654
17.4SIP和VOIP簡介 662
第18章Android高級開發 663
18.1Android的安全性 664
18.1.1Linux核心安全 664
18.1.2許可權簡介 664
18.2CloudtoDeviceMessaging簡介 666
18.2.1C2DM的局限性 667
18.2.2註冊使用C2DM 667
18.2.3在C2DM伺服器上註冊
設備 667
18.2.4向設備傳送C2DM訊息 670
18.2.5接收C2DM訊息 672
18.3使用LicenseVerificationLibrary
實現著作權保護 673
18.3.1安裝LicenseVerification
Library 673
18.3.2獲得LicenseVerification
公鑰 673
18.3.3配置LicenseValidation
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使用WakeLock 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.1GooglePlay簡介 693
19.2.2開始使用GooglePlay 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在GooglePlay上推廣 700
19.4.3國際化 700
19.5分析數據和跟蹤推薦人 701
19.5.1使用移動應用程式的Google
Analytics 702
19.5.2使用GoogleAnalytics追蹤
推薦 703