鴻蒙HarmonyOS手機應用開發實戰

柳偉衛

  • 出版商: 清華大學
  • 出版日期: 2022-01-01
  • 定價: $894
  • 售價: 7.5$671
  • 語言: 簡體中文
  • 頁數: 712
  • 裝訂: 平裝
  • ISBN: 7302596425
  • ISBN-13: 9787302596424
  • 立即出貨 (庫存=1)

  • 鴻蒙HarmonyOS手機應用開發實戰-preview-1
  • 鴻蒙HarmonyOS手機應用開發實戰-preview-2
  • 鴻蒙HarmonyOS手機應用開發實戰-preview-3
鴻蒙HarmonyOS手機應用開發實戰-preview-1

買這商品的人也買了...

商品描述

華為自主研發的HarmonyOS(鴻蒙系統)是一款面向未來、面向全場景(移動辦公、運動健康、社交通信、媒體娛樂等)的分佈式操作系統。借助HarmonyOS全場景分佈式系統和設備生態定義全新的硬件、交互和服務體驗。本書採用新的HarmonyOS 2版本作為基石,詳細介紹如何基於HarmonyOS進行手機應用的開發,內容涵蓋HarmonyOS架構、DevEco Studio、應用結構、Ability、任務調度、公共事件、通知、剪切板、Java UI、JS UI、多模輸入、線程管理、視頻、圖像、相機、音頻、媒體會話管理、媒體數據管理、安全管理、二維碼、通用文字識別、藍牙、WLAN、網絡管理、電話服務、設備管理、數據管理、原子化服務、流轉等多個主題。本書列舉了大量解決實際問題的案例,具有很強的前瞻性、應用性、趣味性。 本書主要面向的是對移動應用或HarmonyOS應用感興趣的學生、開發人員、架構師。

作者簡介

柳偉衛,網名老衛、waylau,在IT公司擔任過項目經理、架構師、高級技術顧問等職位,擁有十餘年開發經驗,具有豐富的軟件開發管理及系統架構經驗。曾主導過多個省、***大型分佈式系統的設計與研發,參與過面向全球的供應鏈系統服務化改造。在工作實踐中,積累了大量的分佈式系統、微服務架構以及性能調優經驗。喜歡開源,長期活躍於各大開源社區,編著了《Netty4。 x用戶指南》《Netty實戰(精髓)》等30餘本開源技術教程,廣受網友好評,是CSDN、開源中國、阿里雲開發者、華為開發者等技術社區專家。

目錄大綱

1章  HarmonyOS簡介 1
1.1  HarmonyOS產生的背景 1
1.1.1  為什麼需要HarmonyOS 1
1.1.2  什麼是HarmonyOS 3
1.1.3  鴻蒙生態、OpenHarmony、HarmonyOS的區別與聯繫 4
1.1.4  HarmonyOS應用開發 4
1.2  特性介紹 5
1.2.1  硬件互助,資源共享 5
1.2.2  一次開發,多端部署 8
1.2.3  統一OS,彈性部署 8
1.3  架構介紹 8
1.3.1  內核層 9
1.3.2  系統服務層 9
1.3.3  框架層 10
1.3.4  應用層 11
1.4  獲取開發支持 12
2章  開發環境搭建 13
2.1  註冊華為開發者聯盟賬號 13
2.1.1  開發者享受的權益 13
2.1.2  註冊、認證準備的資料 14
2.1.3  註冊賬號 14
2.1.4  登錄賬號 15
2.1.5  實名認證 15
2.2  DevEco Studio下載安裝 19
2.2.1  運行環境要求 20
2.2.2  下載和安裝de.js 20
2.2.3  下載和安裝DevEco Studio 20
2.3  設置DevEco Studio(可選) 21
2.3.1  npm設置 21
2.3.2  設置Gradle代理 22
2.3.3  設置DevEco Studio代理 23
2.3.4  下載HarmonyOS SDK 24
2.4  DevEco Studio功能介紹 26
2.4.1  創建新的工程 26
2.4.2  添加Module 27
2.4.3  刪除Module 30
2.5  DevEco Studio常見問題小結 30
2.5.1  問題1:訪問Gradle倉庫慢 31
2.5.2  問題2:模擬器端口被佔用無法啟動 32
3章  開發一個HarmonyOS應用 33
3.1  創建一個新工程 33
3.1.1  選擇創建新工程 33
3.1.2  選擇設備應用類型的模板 33
3.1.3  配置項目的信息 34
3.1.4  自動生成工程代碼 35
3.2  運行工程 35
3.2.1  單擊“運行”按鈕 35
3.2.2  選擇模擬器 36
3.2.3  啟動模擬器 36
3.2.4  再次運行工程 38
3.3  在本地真機中運行應用 39
3.3.1  連接真實的設備 39
3.3.2  運行應用 40
3.4  使用遠程真機運行應用 40
3.4.1  啟動遠程真機設備 40
3.4.2  運行應用 41
3.4.3  對應用進行簽名 41
3.4.4  再次運行應用 44
3.5  使用DevEco Studio預覽器 45
3.5.1  如何安裝預覽器 45
3.5.2  如何使用預覽器 45
4章  探索HarmonyOS應用 46
4.1  App 46
4.1.1  什麼是App 46
4.1.2  應用程序包結構 47
4.1.3  代碼層次的應用 48
4.2  Ability 48
4.2.1  Ability類 48
4.2.2  AbilitySlice類 49
4.2.3  UI界面 49
4.3  庫文件 50
4.4  資源文件 50
4.4.1  限定詞目錄 51
4.4.2  資源組目錄 52
4.5  配置文件 53
4.5.1  配置文件的組成 54
4.5.2  app對象的內部結構 56
4.5.3  deviceConfig對象的內部結構 56
4.5.4  module對象的內部結構 59
4.6  pack.info 63
5章  Ability基礎知識 64
5.1  Ability概述 64
5.1.1  FA 65
5.1.2  PA 65
5.1.3  Ability的配置 65
5.2  Ability的三層架構 65
5.2.1  應用的分層 66
5.2.2  不分層的應用架構 66
5.2.3  應用的三層架構 68
5.2.4  Ability的三層架構 69
5.3  Page Ability 69
5.3.1  Page Ability的基本概念 69
5.3.2  多個AbilitySlice構成一個Page 70
5.3.3  AbilitySlice路由配置 71
5.3.4  不同Page間的導航 71
5.4  實戰:多個AbilitySlice間的路由和導航 72
5.4.1  創建應用 72
5.4.2  創建多個AbilitySlice 72
5.4.3  修改PayAbilitySlice佈局 74
5.4.4  設置PayAbilitySlice的樣式 74
5.4.5  如何實現AbilitySlice之間的路由和導航 76
5.4.6  運行 79
5.5  Page與AbilitySlice的生命週期 79
5.5.1  Page的生命週期 80
5.5.2  AbilitySlice的生命週期 81
5.5.3  Page與AbilitySlice生命週期的關聯 82
5.6  實戰:Page與AbilitySlice生命週期的例子 82
5.6.1  修改MainAbilitySlice 83
5.6.2  修改PayAbilitySlice 84
5.6.3  修改PayAbilitySlice佈局和文字 85
5.6.4  實現AbilitySlice之間的路由 87
5.6.5  運行 89
5.7  Service Ability 92
5.7.1  創建Service 93
5.7.2  啟動Service 94
5.7.3  連接Service 95
5.7.4  Service Ability的生命週期 96
5.8  實戰:Service Ability生命週期的例子 97
5.8.1  創建Service 97
5.8.2  創建遠程對象 100
5.8.3  修改MainAbilitySlice 100
5.8.4  修改ability_main.ml 103
5.8.5  運行 104
5.9  Data Ability 105
5.9.1  URI 105
5.9.2  訪問Data 106
5.10  實戰:使用DataAbilityHelper訪問文件 107
5.10.1  創建DataAbility 107
5.10.2  修改UserDataAbility 110
5.10.3  創建文件 113
5.10.4  修改MainAbilitySlice 114
5.10.5  創建FileUtils類 115
5.10.6  運行 116
5.11  實戰:使用DataAbilityHelper訪問數據庫 117
5.11.1  創建DataAbility 117
5.11.2  初始化數據庫 120
5.11.3  重寫query方法 121
5.11.4  重寫insert方法 121
5.11.5  重寫update方法 122
5.11.6  重寫delete方法 122
5.11.7  修改MainAbilitySlice 123
5.11.8  運行 126
5.12  Intent 127
5.12.1  Operation與Parameters 127
5.12.2  根據Ability的全稱啟動應用 128
5.12.3  實戰:根據Operation的其他屬性啟動應用 129
5.12.4  實戰:啟動系統應用 135
6章  Ability任務調度 140
6.1  分佈式任務調度概述 140
6.1.1  “級虛擬終端”的能力互助 140
6.1.2  跨設備軟件訪問的系統服務 141
6.1.3  全場景下的任務調度 142
6.2  分佈式任務調度能力簡介 142
6.2.1  全局查詢 143
6.2.2  啟動和關閉 143
6.2.3  連接和斷開連接 144
6.2.4  輕量通信 144
6.3  分佈式任務調度實現原理 145
6.3.1  PRC 145
6.3.2  HarmonyOS設備之間的通信 146
6.3.3  HarmonyOS設備與其他OS設備之間的通信 146
6.4  實現分佈式任務調度 147
6.4.1  如何實現分佈式任務調度 147
6.4.2  分佈式任務調度支持的場景 148
6.5  實戰:分佈式任務調度啟動遠程FA 148
6.5.1  修改RemoteFA應用 148
6.5.2  修改DistributedSchedulingStartRemoteFA應用 150
6.5.3  運行 156
6.6  實戰:分佈式任務調度啟動和關閉遠程PA 157
6.6.1  修改RemotePA應用 157
6.6.2  修改DistributedSchedulingStartSRemotePA應用 160
6.6.3  運行 167
7章  Ability公共事件與通知 169
7.1  公共事件與通知概述 169
7.1.1  公共事件和通知 169
7.1.2  約束與限制 170
7.2  公共事件服務 170
7.2.1  接口說明 170
7.2.2  發佈公共事件 172
7.2.3  訂閱公共事件 174
7.2.4  訂公共事件 176
7.3  實戰:公共事件服務發布事件 176
7.3.1  修改ability_main.ml 176
7.3.2  修改MainAbilitySlice 177
7.3.3  自定義權限 179
7.3.4  運行 179
7.4  實戰:公共事件服務訂閱事件 180
7.4.1  修改ability_main.ml 180
7.4.2  創建CommonEventSubscriber 180
7.4.3  修改MainAbility 181
7.4.4  修改配置文件 182
7.4.5  運行 183
7.5 通知服務 183
7.5.1  接口說明 183
7.5.2  創建tificationSlot 186
7.5.3  發布通知 186
7.5.4  取消通知 187
7.6  實戰:通知發布與取消 188
7.6.1  修改ability_main.ml 188
7.6.2  修改MainAbilitySlice 189
7.6.3  運行 191

8章  剪貼板 193
8.1  剪貼板概述 193
8.2  場景介紹 193
8.3  接口說明 194
8.3.1  SystemPasteboard 194
8.3.2  PasteData 195
8.3.3  PasteData.Record 195
8.3.4  PasteData.DataProperty 196
8.3.5  IPasteDataChangedListener 196
8.4  實戰:剪貼板數據的寫入 196
8.4.1  修改ability_main.ml 196
8.4.2  修改MainAbilitySlice 197
8.4.3  運行 199
8.5  實戰:剪切板數據的讀取 199
8.5.1  修改ability_main.ml 199
8.5.2  修改MainAbilitySlice 200
8.5.3  運行 202

9章  用Java開發UI 204
9.1用Java開發UI概述 204
9.1.1  組件和佈局 204
9.1.2  Component和ComponentContainer 205
9.1.3  LayoutConfig 205
9.1.4  組件樹 206
9.2  組件與佈局 206
9.2.1  編寫佈局的方式 206
9.2.2  組件分類 207
9.3  實戰:通過XML創建佈局 207
9.3.1  理解XML佈局文件 207
9.3.2  創建XML佈局文件 209
9.3.3  加載XML佈局 209
9.3.4  顯示XML佈局 210
9.4  實戰:通過Java創建佈局 211
9.4.1  新建AbilitySlice 212
9.4.2  創建佈局 212
9.4.3  在佈局中添加組件 213
9.4.4  顯示佈局 214
9.5  實戰:常用顯示類組件——Tet 215
9.5.1  設置背景 216
9.5.2  設置字體大小和顏色 217
9.5.3  設置字體風格和字重 218
9.5.4  設置文本對齊方式 219
9.5.5  設置文本換行和大顯示行數 221
9.5.6  設置自動調節字體大小 222
9.5.7  實現跑馬燈效果 224
9.5.8  場景示例 225
9.6  實戰:常用顯示類組件——Image 227
9.6.1  創建Image 227
9.6.2  設置透明度 228
9.6.3  設置縮放係數 229
9.7  實戰:常用顯示類組件——ProgressBar 230
9.7.1  創建ProgressBar 230
9.7.2  設置方向 231
9.7.3  設置顏色 232
9.7.4  設置提示文字 233
9.8  實戰:常用交互類組件——Button 234
9.8.1  創建Button 235
9.8.2  設置點擊事件 237
9.8.3  設置橢圓按鈕 239
9.8.4  設置圓形按鈕 241
9.8.5  場景示例 242
9.9  實戰:常用交互類組件——TetField 247
9.9.1  創建TetField 247
9.9.2  設置多行顯示 248
9.9.3  場景示例 249
9.10  實戰:常用交互類組件——Checkbo 251
9.10.1  創建Checkbo 251
9.10.2  設置選中和取消選中時的顏色 252
9.11  實戰:常用交互類組件——RadioButton/RadioContainer 253
9.11.1  創建RadioButton/RadioContainer 253
9.11.2  設置顯示單選結果 255
9.12  實戰:常用交互類組件——Switch 259
9.12.1  創建Switch 259
9.12.2  設置文本 260
9.13  實戰:常用交互類組件——ScrollView 261
9.13.1  創建ScrollView 261
9.13.2  配置Tet顯示的內容 262
9.14  實戰:常用交互類組件——Tab/TabList 263
9.14.1  創建TabList 263
9.14.2  響應焦點變化 266
9.15  實戰:常用交互類組件——Picker 268
9.15.1  創建Picker 268
9.15.2  格式化Picker的顯示 268
9.15.3  日期滑動選擇器DatePicker 270
9.15.4  時間滑動選擇器TimePicker 271
9.16  實戰:常用交互類組件——ListContainer 272
9.16.1  創建ListContainer 272
9.16.2  創建ListContainer子佈局 273
9.16.3  創建ListContainer數據包裝類 273
9.16.4  創建ListContainer數據提供者 274
9.16.5  修改MainAbilitySlice 275
9.17  實戰:常用交互類組件——RoundProgressBar 276
9.17.1  創建RoundProgressBar 276
9.17.2  設置開始和結束角度 277
9.18  實戰:常用交互類組件——DirectionalLayout 278
9.18.1  創建DirectionalLayout 279
9.18.2  設置水平排列 280
9.18.3  設置權重 281
9.19  實戰:常用交互類組件——DependentLayout 283
9.19.1  創建DependentLayout 283
9.19.2  相對於同級組件 284
9.19.3  相對於父組件 284
9.19.4  場景示例 285
9.20  實戰:常用交互類組件——StackLayout 286
9.21  實戰:常用交互類組件——TableLayout 288

10章  用JS開發UI 290
10.1  用JS開發UI概述 290
10.1.1  基礎能力 290
10.1.2  整體架構 291
10.2  實戰:創建JS FA應用 291
10.2.1  創建應用 292
10.2.2  AceAbility 293
10.2.3  如何加載JS FA 294
10.2.4  JS FA開發目錄 294
10.2.5  運行 296
10.3  組件與佈局 297
10.3.1  組件分類 297
10.3.2  佈局 297
10.4  實戰:點贊按鈕 299
10.4.1  應用概述 299
10.4.2  修改應用 299
10.4.3  運行應用 300
10.5  實戰:JS FA調用PA 301
10.5.1  FA調用PA接口 301
10.5.2  創建應用及編寫FA 302
10.5.3  編寫PA 303
10.5.4  運行應用 306

11章  多模輸入UI開發 307
11.1  多模輸入概述 307
11.2  接口說明 308
11.2.1  MultimodalEvent 308
11.2.2  CompositeEvent 308
11.2.3  RotationEvent 308
11.2.4  SpeechEvent 309
11.2.5  ManipulationEvent 309
11.2.6  KeyEvent 309
11.2.7  TouchEvent 310
11.2.8  KeyBoardEvent 310
11.2.9  MouseEvent 310
11.2.10  MmiPoint 311
11.2.11  EventCreator 311
11.2.12  InputDevice 311
11.3  實戰:多模輸入事件 311
11.3.1  修改MainAbilitySlice 311
11.3.2  獲取多模輸入權限 313

12章  線程管理 314
12.1  線程管理概述 314
12.2  場景介紹 314
12.2.1  傳統Java多線程管理 315
12.2.2  HarmonyOS多線程管理 317
12.3  接口說明 317
12.3.1  GlobalTaskDispatcher 317
12.3.2  ParallelTaskDispatcher 317
12.3.3  SerialTaskDispatcher 318
12.3.4  SpecTaskDispatcher 318
12.4  實戰:線程管理示例 318
12.4.1  修改ability_main.ml 319
12.4.2  自定義任務 320
12.4.3  執行任務派發 321
12.4.4  運行 322
12.5  線程間通信概述 323
12.5.1  基本概念 323
12.5.2  運作機制 324
12.5.3  約束限制 324
12.6  實戰:線程間通信示例 324
12.6.1  修改ability_main.ml 325
12.6.2  自定義事件處理器 325
12.6.3  執行事件發送 327
12.6.4  運行 328

13章  視頻 330
13.1  視頻概述 330
13.2  實戰:媒體編解碼能力查詢 330
13.2.1  接口說明 331
13.2.2  創建應用 331
13.2.3  修改ability_main.ml 331
13.2.4  修改MainAbilitySlice 332
13.2.5  運行 334
13.3  實戰:視頻編解碼 334
13.3.1  接口說明 335
13.3.2  創建應用 335
13.3.3  修改ability_main.ml 335
13.3.4  修改MainAbilitySlice 336
13.3.5  運行 340
13.4  實戰:視頻播放 340
13.4.1  接口說明 340
13.4.2  創建應用 341
13.4.3  修改ability_main.ml 341
13.4.4  修改MainAbilitySlice 343
13.4.5  運行 347
13.5  實戰:視頻錄製 347
13.5.1  接口說明 347
13.5.2  創建應用 348
13.5.3  修改ability_main.ml 348
13.5.4  修改MainAbilitySlice 350
13.5.5  運行 352

14章  圖像 353
14.1  圖像概述 353
14.1.1  基本概念 353
14.1.2  約束與限制 354
14.2  實戰:圖像解碼和編碼 354
14.2.1  接口說明 354
14.2.2  創建應用 355
14.2.3  修改ability_main.ml 355
14.2.4  修改MainAbilitySlice 356
14.2.5  解碼作說明 360
14.2.6  編碼作說明 361
14.3  實戰:位圖作 361
14.3.1  接口說明 361
14.3.2  創建應用 363
14.3.3  修改ability_main.ml 363
14.3.4  修改MainAbilitySlice 364
14.3.5  創建PielMap作說明 365
14.3.6  從位圖對像中獲取信息作說明 366
14.3.7  讀取和寫入像素作說明 366
14.3.8  釋放資源 367
14.4  實戰:圖像屬性解碼 368
14.4.1  接口說明 368
14.4.2  創建應用 368
14.4.3  修改ability_main.ml 368
14.4.4  修改MainAbilitySlice 369
14.4.5  運行 372

15章  相機 373
15.1  相機概述 373
15.1.1  基本概念 373
15.1.2  約束與限制 374
15.1.3  相機開發流程 374
15.1.4  核心接口 374
15.1.5  相機權限 374
15.2  實戰:相機設備創建 375
15.2.1  接口說明 375
15.2.2  創建應用 375
15.2.3  聲明相機權限 375
15.2.4  修改ability_main.ml 376
15.2.5  修改MainAbilitySlice 377
15.2.6  運行 381
15.3  實戰:相機設備配置 382
15.3.1  添加類變量 382
15.3.2  新增FrameStateCallbackImpl 383
15.3.3  修改onStart方法 384
15.3.4  修改onCreated方法 385
15.3.5  運行 386
15.4  實戰:相機幀捕獲 387
15.4.1  接口說明 387
15.4.2  啟動預覽(循環幀捕獲) 387
15.4.3  釋放資源 388
15.4.4  運行 388
15.4.5  實現拍照(單幀捕獲) 388
15.4.6  聲明存儲權限 391
15.4.7  運行 393

16章  音頻 394
16.1  音頻概述 394
16.1.1  基本概念 394
16.1.2  約束與限制 395
16.2  實戰:音頻播放 395
16.2.1  接口說明 395
16.2.2  創建應用 396
16.2.3  修改ability_main.ml 396
16.2.4  修改MainAbilitySlice 397
16.2.5  運行 401
16.3  實戰:音頻採集 402
16.3.1  接口說明 402
16.3.2  創建應用 403
16.3.3  聲明麥克風權限 403
16.3.4  修改ability_main.ml 404
16.3.5  修改MainAbilitySlice 405
16.4  實戰:短音播放 408
16.4.1  接口說明 408
16.4.2  創建應用 409
16.4.3  修改ability_main.ml 409
16.4.4  修改MainAbilitySlice 410
16.4.5  運行 413

17章  媒體會話管理 414
17.1  媒體會話管理概述 414
17.1.1  AVSession框架主要的類 414
17.1.2  約束與限制 415
17.2  接口說明 416
17.2.1  AVBrowser的主要接口 416
17.2.2  AVBrowserService的主要接口 416
17.2.3  AVController的主要接口 417
17.2.4  AVSession的主要接口 418
17.2.5  AVElement的主要接口 418
17.3  實戰:AVSession媒體框架客戶端 419
17.3.1  創建應用 419
17.3.2  修改ability_main.ml 419
17.3.3  修改MainAbilitySlice 420
17.4  實戰:AVSession媒體框架服務端 424
17.4.1  創建Service 424
17.4.2  修改AVService 425
17.4.3  運行 428

18章  媒體數據管理 429
18.1  媒體數據管理概述 429
18.1.1  媒體數據管理基本概念 429
18.1.2  約束與限制 429
18.2  實戰:媒體元數據的獲取 430
18.2.1  接口說明 430
18.2.2  創建應用 431
18.2.3  修改ability_main.ml 431
18.2.4  修改MainAbilitySlice 432
18.2.5  運行 435
18.3  實戰:媒體存儲數據作 436
18.3.1  接口說明 436
18.3.2  創建應用 437
18.3.3  聲明權限 437
18.3.4  修改ability_main.ml 438
18.3.5  修改MainAbilitySlice 439
18.3.6  運行 443
18.4  實戰:視頻與圖像縮略圖獲取 444
18.4.1  接口說明 444
18.4.2  創建應用 444
18.4.3  修改ability_main.ml 445
18.4.4  修改MainAbilitySlice 446
18.4.5  運行 449

19章  安全管理 451
19.1  權限的基本概念 451
19.2  權限運作機制 452
19.3  權限約束與限制 452
19.4  應用權限列表 453
19.4.1  權限分類 453
19.4.2  敏感權限 453
19.4.3  非敏感權限 454
19.4.4  受限開放的權限 455
19.5  應用權限開發流程 455
19.5.1  權限申請 455
19.5.2  自定義權限 456
19.5.3  訪問權限控制 458
19.5.4  接口說明 459
19.5.5  動態申請權限的開發步驟 460
19.6  生物特徵識別認證概述 461
19.7  生物特徵識別運作機制 461
19.8  生物特徵識別的約束與限制 462
19.9  生物特徵識別的開發流程 462
19.9.1  接口說明 462
19.9.2  開發準備 463
19.9.3  開發過程 463

20章  二維碼 466
20.1  二維碼概述 466
20.1.1  什麼是二維碼 466
20.1.2  二維碼的發展歷程 467
20.2  場景介紹 467
20.3  接口說明 468
20.4  實戰:生成二維碼 468
20.4.1  創建應用 468
20.4.2  修改ability_main.ml 468
20.4.3  修改MainAbilitySlice 470
20.4.4  運行 473

21章  通用文字識別 474
21.1  通用文字識別概述 474
21.1.1  什麼是OCR 474
21.1.2  OCR發展簡史 474
21.2  場景介紹 475
21.3  接口說明 475
21.3.1  setVisionConfiguration()方法 476
21.3.2  detect()方法 476
21.3.3  約束與限制 476
21.4  實戰:通用文字識別示例 477
21.4.1  創建應用 477
21.4.2  修改ability_main.ml 477
21.4.3  修改MainAbilitySlice 479
21.4.4  運行 482

22章  藍牙 484
22.1  藍牙概述 484
22.1.1  傳統藍牙 484
22.1.2  BLE 484
22.1.3  約束與限制 485
22.2  實戰:傳統藍牙本機管理 485
22.2.1  接口說明 485
22.2.2  創建應用 486
22.2.3  聲明權限 486
22.2.4  修改ability_main.ml 487
22.2.5  修改MainAbilitySlice 488
22.2.6  運行 491
22.3  實戰:傳統藍牙遠端設備作 494
22.3.1  接口說明 494
22.3.2  創建應用 495
22.3.3  聲明權限 495
22.3.4  修改ability_main.ml 496
22.3.5  修改MainAbilitySlice 497
22.3.6  運行 501
22.4  實戰:BLE掃描和廣播 503
22.4.1  接口說明 503
22.4.2  創建應用 504
22.4.3  聲明權限 504
22.4.4  修改ability_main.ml 505
22.4.5  修改MainAbilitySlice 507
22.4.6  運行 510

23章  WLAN 512
23.1  WLAN概述 512
23.1.1  WLAN簡介 512
23.1.2  約束與限制 513
23.2  實戰:WLAN的基礎功能 513
23.2.1  接口說明 513
23.2.2  創建應用 514
23.2.3  聲明權限 514
23.2.4  修改ability_main.ml 515
23.2.5  修改MainAbilitySlice 516
23.2.6  運行 520
23.3  實戰:不信任熱點配置 522
23.3.1  接口說明 522
23.3.2  創建應用 522
23.3.3  聲明權限 522
23.3.4  修改ability_main.ml 523
23.3.5  修改MainAbilitySlice 524
23.3.6  運行 526
23.4  實戰:WLAN消息通知 527
23.4.1  接口說明 527
23.4.2  創建應用 528
23.4.3  修改ability_main.ml 528
23.4.4  修改MainAbilitySlice 529
23.4.5  運行 531

24章  網絡管理 533
24.1  網絡管理概述 533
24.1.1  功能 533
24.1.2  約束與限制 533
24.2  實戰:使用當前網絡打開一個URL鏈接 534
24.2.1  接口說明 534
24.2.2  創建應用 534
24.2.3  聲明權限 534
24.2.4  修改ability_main.ml 535
24.2.5  修改MainAbilitySlice 535
24.2.6  運行 539
24.3  實戰:使用當前網絡進行Socket數據傳輸 540
24.3.1  接口說明 540
24.3.2  創建應用 540
24.3.3  聲明權限 540
24.3.4  修改ability_main.ml 541
24.3.5  修改MainAbilitySlice 541
24.3.6  運行 545
24.4  實戰:流量統計 546
24.4.1  接口說明 546
24.4.2  創建應用 546
24.4.3  聲明權限 546
24.4.4  修改ability_main.ml 547
24.4.5  修改MainAbilitySlice 548
24.4.6  運行 551

25章  電話服務 553
25.1  電話服務概述 553
25.1.1  主要的API 553
25.1.2  約束與限制 553
25.2  實戰:獲取當前蜂窩網絡信號信息 554
25.2.1  接口說明 554
25.2.2  創建應用 554
25.2.3  修改ability_main.ml 554
25.2.4  修改MainAbilitySlice 555
25.2.5  運行 557
25.3  實戰:觀察蜂窩網絡的狀態變化 559
25.3.1  接口說明 560
25.3.2  創建應用 560
25.3.3  聲明權限 560
25.3.4  修改ability_main.ml 560
25.3.5  修改MainAbilitySlice 562
25.3.6  運行 564

26章  設備管理 568
26.1  設備管理概述 568
26.1.1  傳感器 569
26.1.2  控制類小器件 570
26.1.3  位置 571
26.2  實戰:傳感器示例 572
26.2.1  接口說明 572
26.2.2  創建應用 572
26.2.3  修改ability_main.ml 573
26.2.4  修改MainAbilitySlice 573
26.2.5  運行 576
26.3  實戰:Light示例 578
26.3.1  接口說明 578
26.3.2  創建應用 578
26.3.3  修改abil

ity_main.ml 579
26.3.4  修改MainAbilitySlice 579
26.3.5  運行 582
26.4  實戰:獲取設備的位置 582
26.4.1  接口說明 583
26.4.2  創建應用 583
26.4.3  聲明權限 583
26.4.4  修改ability_main.ml 584
26.4.5  修改MainAbilitySlice 585
26.4.6  運行 588
26.5  實戰:(逆)地理編碼轉化 589
26.5.1  接口說明 589
26.5.2  創建應用 590
26.5.3  修改ability_main.ml 590
26.5.4  修改MainAbilitySlice 591
26.5.5  運行 593

27章  數據管理 595
27.1  數據管理概述 595
27.2  關係型數據庫 596
27.2.1  基本概念 596
27.2.2  運作機制 596
27.2.3  默認配置 597
27.2.4  約束與限制 597
27.2.5  接口說明 597
27.2.6  開發過程 600
27.3  對象關係映數據庫 601
27.3.1  基本概念 601
27.3.2  運作機制 602
27.3.3  實體對象屬性支持的類型 602
27.3.4  接口說明 603
27.4  實戰:使用對象關係映數據庫 605
27.4.1  修改build.gradle 605
27.4.2  新增User 606
27.4.3  新增UserStore 607
27.4.4  創建DataAbility 607
27.4.5  初始化數據庫 609
27.4.6  新增queryAll方法 610
27.4.7  新增insert方法 611
27.4.8  新增update方法 611
27.4.9  新增deleteAll方法 611
27.4.10  修改ability_main.ml 612
27.4.11  修改MainAbilitySlice 614
27.4.12  運行 616
27.5  輕量級偏好數據庫 619
27.5.1  基本概念 619
27.5.2  運作機制 620
27.5.3  約束與限制 620
27.5.4  接口說明 621
27.6  實戰:使用輕量級偏好數據庫 622
27.6.1  修改ability_main.ml 622
27.6.2  修改MainAbilitySlice 624
27.6.3  運行 627
27.7  數據存儲管理 630
27.7.1  基本概念 630
27.7.2  運作機制 630
27.7.3  接口說明 631
27.8  實戰:使用數據存儲管理 632
27.8.1  修改ability_main.ml 632
27.8.2  修改MainAbilitySlice 633
27.8.3  運行 635

28章  原子化服務 637
28.1  原子化服務概述 637
28.1.1  什麼是原子化服務 637
28.1.2  原子化服務特徵 638
28.1.3  原子化服務典型的使用場景 639
28.2  服務中心 639
28.2.1  服務中心入口 639
28.2.2  常用服務 639
28.2.3  我的收藏 639
28.2.4  服務發現 640
28.3  實戰:原子化服務HelloDog 641
28.3.1  初始化原子化服務 641
28.3.2  理解原子化服務的項目結構 641
28.3.3  搜索原子化服務 655
28.3.4  運行原子化服務 656

29章  流轉 657
29.1  流轉概述 657
29.2  流轉架構 658
29.2.1  跨端遷移流程 659
29.2.2  多端協同流程 659
29.2.3  兼容性設計 660
29.3  跨端遷移 661
29.3.1  跨端遷移流程 661
29.3.2  接口說明 663
29.3.3  約束與限制 664
29.4  實戰:實現跨端遷移與回遷 665
29.4.1  MainAbility實現IAbilityContinuation接口 665
29.4.2  聲明權限 666
29.4.3  設計界面與佈局 668
29.4.4  修改MainAbilitySlice 669
29.4.5  新增DeviceUtils 671
29.4.6  運行 673
29.5  多端協同 674
29.5.1  多端協同流程 674
29.5.2  接口說明 675
29.5.3  約束與限制 677
29.6  實戰:實現多端協同 677
29.6.1  MainAbility實現IAbilityContinuation接口 677
29.6.2  聲明權限 678
29.6.3  設計界面與佈局 680
29.6.4  修改MainAbilitySlice 681
29.6.5  新增DeviceUtils 684
29.6.6  運行 685

30章  綜合案例:俄羅斯方塊遊戲 687
30.1  案例概述 687
30.1.1  俄羅斯方塊遊戲概述 687
30.1.2  俄羅斯方塊遊戲的規則 688
30.2  代碼實現 688
30.2.1  技術重點 688
30.2.2  設置佈局 689
30.2.3  設置全屏 692
30.2.4  應用的主體邏輯 693
30.2.5  初始化遊戲 696
30.2.6  創建網格數據 697
30.2.7  繪製網格 702
30.2.8  啟動遊戲 703
30.2.9  左移作 705
30.2.10  右移作 707
30.2.11  轉換作 708
30.2.12  重置作 711
30.3  應用運行 711

參考文獻 713