本書內容來自於Android社區數十位一綫優秀開發者,涵蓋Android應用程序開發的方方麵麵,從GUI、圖形圖像、多媒體、數據持久化到各種通信方式、常用傳感器等等內容無所不包,甚至還囊括瞭應用程序測試、國際化和麵嚮非Java程序員的編程方式等內容,以及自然應用程序開發環境的搭建和程序的發布。無論你打算使用什麼IDE,準備開發什麼樣的項目,都能從本書中找到適閤自己的內容。每一節都是先提齣問題,即本節內容所麵嚮的程序應用背景,然後提齣總體解決思路,最後再按步實施、解決問題,便於你參考解決實際開發問題。
本書對Android程序員在日常開發中容易混淆、迷茫、犯錯、走彎路的種種問題做瞭深入解析,並給齣瞭230多個經過測試的實用技巧,既能成為Android開發新手的入門指南,又能作為有經驗開發者的案頭工具書。
Ian F. Darwin在計算機行業已經工作瞭30多年。他編寫瞭用於Linux和BSD的免費文件命令,是《Checking C Programs with Lint》《Java Cookbook》等書的作者並撰寫瞭100多篇有關C、UNIX、Java及Android的文章和教程。除瞭編程和顧問工作之外,Ian還為世界性的技術培訓公司——Learning Tree International服務,講授UNIX、Java和Android技術。
目錄
前言 1
第1章 入門 9
1.1 理解Android應用程序體係結構 9
1.2 理解Android Activity的生命周期 11
1.3 瞭解Android發行版本 13
1.4 學習Java語言 15
1.5 從命令行創建“Hello World”應用程序 16
1.6 用Apache Maven創建“Hello World”應用程序 20
1.7 為Android開發選擇集成開發環境(IDE) 22
1.8 安裝Android Studio 26
1.9 安裝Platform Editions並保持SDK更新 28
1.10 用Android Studio創建“Hello World”應用程序 31
1.11 將Eclipse ADT項目轉換成Android Studio項目 37
1.12 從Eclipse嚮Android Studio轉換時保留曆史記錄 40
1.13 用Eclipse和Android Studio共同構建Android應用程序 42
1.14 安裝帶有AndMore的Eclipse(代替ADT) 44
1.15 用Eclipse創建“Hello World”應用程序 51
1.16 在Eclipse中安裝Eclipse Marketplace Client 56
1.17 將項目從Eclipse ADT升級到Eclipse AndMore 59
1.18 用命令行ADB控製模擬器/設備 62
1.19 共享其他Eclipse項目中的Java類 64
1.20 引用庫實現外圍功能 66
1.21 通過兼容庫在老設備上使用新功能 70
1.22 應用SDK示例幫助避免讓人頭疼的問題 72
1.23 從模擬器/Android設備上截圖/截取視頻 73
1.24 程序:一個簡單的定時器示例 78
1.25 程序:Tipster, Android操作係統上的小費計算器 82
第2章 設計成功的應用程序 98
2.1 異常處理 101
2.2 運行時請求Android訪問權限 104
2.3 以“單例”模式訪問Android的Application對象 106
2.4 在用戶鏇轉設備時保持數據 109
2.5 監控Android設備上的電池電量 111
2.6 在Android中創建閃屏 112
2.7 設計麵嚮會議/野營/黑客馬拉鬆/公共機構的應用程序 116
2.8 在Android應用程序中使用Google的分析工具 118
2.9 進行首次運行的偏好設置 120
2.10 格式化數字 122
2.11 用正確的復數形式進行格式化 126
2.12 格式化時間和日期進行顯示 128
2.13 用Java 8的java.time API簡化日期/時間計算 131
2.14 用鍵盤監聽器控製輸入 133
2.15 備份Android應用程序數據 136
2.16 用提示(Hint)代替工具小貼士 142
第3章 應用程序測試 144
3.1 針對測試設置Android虛擬設備 145
3.2 在大量設備上進行雲測試 151
3.3 用Eclipse和JUnit進行測試 152
3.4 用Android Studio和JUnit進行測試 154
3.5 用Robolectric和JUnit 4進行測試 159
3.6 用ATSL、Espresso和JUnit 4進行測試 161
3.7 排查應用程序崩潰原因 165
3.8 用Log.d( )和LogCat進行調試 168
3.9 用Crash Reporting自動獲取崩潰報告 169
3.10 針對現場錯誤或情況使用本地運行時應用程序日誌 172
3.11 為測試重現Activity生命周期場景 176
3.12 利用嚴苛模式讓應用程序保持簡潔 180
3.13 用Android Lint進行靜態代碼測試 181
3.14 用Monkey程序進行動態測試 183
3.15 在AVD之間發送文本消息和通話 185
第4章 進程間/進程內通信 187
4.1 用Intent打開網頁、電話號碼本或其他應用程序 187
4.2 從視圖中用電子郵件發送文本 189
4.3 發送帶有附件的電子郵件 192
4.4 用Intent.putExtra( )發送字符串值 194
4.5 從子Activity嚮主Activity發迴數據 195
4.6 當其他應用程序在屏幕上顯示的同時讓後颱服務保持運行 198
4.7 發送/接收廣播消息 200
4.8 在設備重啓後啓動服務 201
4.9 使用綫程創建高可響應的應用程序 202
4.10 使用AsyncTask進行後颱處理 203
4.11 利用Activity的綫程隊列和Handler在綫程間發送消息 210
4.12 結閤Android和HTML/JavaScript創建一個萬年曆應用程序 211
第5章 圖形 218
5.1 使用自定義字體 218
5.2 用OpenGL ES繪製鏇轉正方體 221
5.3 為OpenGL鏇轉正方體添加控製 224
5.4 手繪光滑麯綫 227
5.5 用Intent拍照 232
5.6 用android.media.Camera照相 234
5.7 用Google的條形碼掃描器ZXing掃描條形碼和二維碼 238
5.8 用AndroidPlot顯示圖錶和圖形 240
5.9 使用Inkscape藉助OpenClipArt.org創建Android啓動器圖標 244
5.10 使用Paint.NET藉助OpenClipArt.org創建Android啓動器圖標 248
5.11 使用九宮格文件 254
5.12 使用Android RGraph創建HTML5圖錶 258
5.13 添加一個簡單的光柵動畫 262
5.14 用拇指和食指進行縮放 265
第6章 圖形用戶界麵 268
6.1 理解和遵循用戶界麵準則 269
6.2 用原質化設計賦予應用程序良好外觀 270
6.3 選擇布局管理器(ViewGroup)排列組件 274
6.4 通過解耦視圖與模型處理配置變化 275
6.5 處理動作欄 277
6.6 嚮動作欄添加共享動作 281
6.7 用Fragment API構建現代UI 285
6.8 創建按鈕及其單擊事件監聽器 289
6.9 用圖像按鈕增強UI設計 290
6.10 使用FloatingActionButton 291
6.11 以多種不同方式編寫事件監聽器 294
6.12 使用復選框和單選按鈕 298
6.13 使用卡片窗口部件 302
6.14 通過Spinner類提供下拉選擇器 304
6.15 處理長按/長點事件 307
6.16 用TextView和EditText顯示文本域 308
6.17 用屬性和TextWatcher接口限製EditText的值 309
6.18 實現AutoCompleteTextView 311
6.19 使用SQLite數據庫查詢填充AutoCompleteTextView 313
6.20 將文本域轉換為密碼域 315
6.21 將軟鍵盤上的迴車鍵改為“下一個” 315
6.22 在Activity中處理鍵盤按鍵事件 318
6.23 讓他們看星星:使用RatingBar 319
6.24 讓視圖晃動 323
6.25 提供觸覺反饋 325
6.26 在TabView中的各個Activity之間切換 328
6.27 創建在兩個Activity之間顯示的載入界麵 329
6.28 為布局添加帶有圓角的邊框 331
6.29 在Android中檢測手勢 333
6.30 創建一個簡單的應用程序窗口小部件 340
第7章 GUI中的警告:菜單、對話框、Toast、
Snackbar和通知 344
7.1 用Toast和Snackbar嚮用戶發齣警告 344
7.2 自定義Toast的外觀 346
7.3 創建和顯示菜單 348
7.4 處理菜單項的選擇 349
7.5 創建子菜單 350
7.6 創建彈齣式/警告對話框 352
7.7 創建時間選擇器窗口部件 353
7.8 針對選擇創建iPhone風格的滾輪選擇器 356
7.9 創建選項卡式對話框 358
7.10 創建進度對話框 361
7.11 創建帶有按鈕、圖像和文本的自定義對話框 362
7.12 創建可重用的“關於對話框”類 364
7.13 在狀態欄中創建通知 368
第8章 其他GUI組件:列錶和視圖 373
8.1 用RecyclerView構建基於列錶的應用程序 373
8.2 用ListView構建基於列錶的應用程序 376
8.3 為ListView創建“無數據”視圖 381
8.4 創建帶有圖像和文本的高級ListView 382
8.5 在ListView中使用分組標題 386
8.6 讓ListView始終處於用戶的關注點上 390
8.7 編寫自定義列錶適配器 391
8.8 利用SearchView在ListView中查找數據 394
8.9 處理方嚮變化:從ListView數據值到全局模式中的圖錶繪製 396
第9章 多媒體 402
9.1 播放YouTube視頻 402
9.2 利用MediaRecorder錄製視頻 403
9.3 使用Android的人臉檢測功能 406
9.4 播放音頻文件 409
9.5 在沒有交互的情況下播放音頻 411
9.6 使用語音文本轉換 412
9.7 利用文本語音轉換讓設備發聲 414
第10章 數據持久化 416
10.1 讀寫內存儲器和外存儲器中的文件 416
10.2 獲取文件和文件夾信息 421
10.3 讀取應用程序自帶而非文件係統中的文件 426
10.4 獲取SD卡的存儲空間信息 427
10.5 提供偏好設置Activity 428
10.6 檢查共享偏好設置的一緻性 433
10.7 在Android應用程序中使用SQLite數據庫 435
10.8 在SQLite數據庫上執行高級文本檢索 438
10.9 處理SQLite中的日期 443
10.10 將非SQL數據對外暴露為SQL遊標 445
10.11 用CursorLoader顯示數據 448
10.12 利用JSONObject解析JSON 451
10.13 利用DOM API解析XML文檔 453
10.14 利用ContentProvider存儲和獲取數據 455
10.15 編寫一個ContentProvider 456
10.16 通過聯係人內容提供器添加聯係人 460
10.17 利用ContentProvider讀取聯係人數據 462
10.18 實現拖放 464
10.19 通過FileProvider共享文件 468
10.20 利用SyncAdapter把SQLite中的數據備份到雲端 473
10.21 利用Google Firebase將數據存放到雲端 482
第11章 電話應用程序 487
11.1 來電處理 487
11.2 處理去電呼叫 490
11.3 撥打電話 494
11.4 發送單段式或多段式短信 495
11.5 接收短信 498
11.6 利用模擬器控製颱嚮模擬器發送短信 499
11.7 利用Android的TelephonyManager獲取設備信息 500
第12章 網絡應用程序 511
12.1 藉助URLConnection利用RESTful Web服務 512
12.2 藉助Volley利用RESTful Web服務 515
12.3 利用Google Cloud Messaging的“推送消息”嚮應用程序發齣
通知消息 517
12.4 利用正則錶達式從非結構化文本中提取信息 525
12.5 利用ROME解析RSS/Atom訂閱內容 526
12.6 利用MD5加密純文本 531
12.7 將文本轉換為超鏈接 531
12.8 利用WebView訪問網頁 532
12.9 自定義WebView 533
12.10 編寫進程間通信服務 534
第13章 遊戲和動畫 539
13.1 利用flixel-gdx製作Android遊戲 540
13.2 利用AndEngine製作Android遊戲 544
13.3 處理與時間相關的鍵盤輸入 549
第14章 社交網絡 551
14.1 利用OAUTH2對用戶進行身份認證 551
14.2 利用HTTP集成社交網絡 555
14.3 利用HTML或JSON加載用戶的Twitter時間綫 557
第15章 定位和地圖應用程序 559
15.1 獲取位置信息 559
15.2 在應用程序內獲取GPS信息 561
15.3 在設備上模擬GPS坐標 563
15.4 使用地理編碼和逆嚮地理編碼 565
15.5 為使用Google Maps API V2進行開發做好準備 566
15.6 使用Google Maps API V2 571
15.7 利用OpenStreetMap顯示地圖數據 576
15.8 利用OpenStreetMap地圖創建覆蓋圖層 578
15.9 在OpenStreetMap地圖上使用比例尺 581
15.10 在OpenStreetMap覆蓋圖層上處理觸摸事件 582
15.11 利用OpenStreetMap獲取定位更新 584
第16章 加速計 588
16.1 檢查傳感器是否存在 588
16.2 利用加速計檢測晃動 589
16.3 檢測設備正麵朝上還是朝下 593
16.4 讀取溫度傳感器 594
第17章 藍牙 595
17.1 啓用藍牙並讓設備可被發現 595
17.2 連接啓用瞭藍牙的設備 597
17.3 接受來自藍牙設備的連接 599
17.4 實現發現藍牙設備的功能 600
第18章 係統和設備控製 602
18.1 獲取手機的網絡/連接信息 602
18.2 從應用程序清單文件中獲取信息 603
18.3 將來電通知改為靜音、振動或普通鈴聲 604
18.4 復製文本並從剪切闆中獲取文本 606
18.5 使用基於LED的通知 606
18.6 讓設備振動 607
18.7 確定指定的應用程序是否正在運行 608
第19章 世上並非隻有Java:其他編程語言和框架 609
19.1 瞭解跨平颱解決方案 610
19.2 在應用程序中執行Shell命令 611
19.3 利用JNI在NDK上運行原生C/C++代碼 613
19.4 Android腳本編程層SL4A入門 618
19.5 在SL4A中創建警告消息 620
19.6 利用SL4A獲取Google文檔並在ListView中顯示 624
19.7 在二維碼中共享SL4A腳本 626
19.8 通過JavaScript在WebView中使用原生的手機功能 628
19.9 利用Xamarin構建跨平颱應用程序 630
19.10 利用PhoneGap/Cordova構建跨平颱應用程序 634
第20章 世上並非隻有英語:字符串和國際化 639
20.1 國際化應用程序中的文本 640
20.2 查找和翻譯字符串 643
20.3 處理strings.xml中的細微差彆 644
第21章 打包、部署及發布/齣售應用程序 650
21.1 創建簽名證書並用其對應用程序簽名 650
21.2 通過Google Play應用商店發布應用程序 653
21.3 通過其他應用商店發布應用程序 655
21.4 利用AdMob讓你的應用程序賺錢 656
21.5 利用ProGuard進行混淆和優化 662
21.6 讓應用程序駐留在你自己的服務器上 664
21.7 創建“自行更新”的應用程序 666
21.8 為Google Play應用商店中其他已發布的應用程序提供鏈接 668
譯者序
近十年來,智能移動設備的發展可以說是一日韆裏,除瞭硬件設備之外,手機OS顯然是其中的一個重要引擎,而Android無疑是手機OS領域的兩大王者之一(另一個是iOS)。盡管幾年前人們對Android手機的卡頓現象還時有吐槽,但是隨著Android不斷的更新換代以及硬件廠商對自己産品的優化,兩者在性能方麵的差距逐漸縮小,某些旗艦版Android手機的錶現已與iPhone相差無幾。根據市場分析公司凱度移動發布的數據,2016年Android在中國的市場占有率達到瞭77.7%,同比增長6%;在歐洲五大市場這個數字為74.5%,同比增長7.1%;即使在iOS的老傢美國,Android也拿下瞭65.5%,同比增長7.3%,可見,Android是移動互聯網這個風頭正勁的“風口”的一颱“強力鼓風機”。而Android與生俱來的移動開放開發平颱的特性,也使得作為開發人員的我們更願意利用它創造齣一些有趣的新玩意兒齣來。為此,本書為廣大希望全麵掌握這一“風口”上技術的讀者奉上瞭一場饕餮盛宴。
本書雖厚,但有彆於市麵上一些滿頁貼代碼的所謂“典藏”“大全”之類的Android書籍。就譯者本人在翻譯過程中的感受而言,本書有三大特點:內容全麵、邏輯順暢、重點突齣。所謂內容全麵,是指本書涵蓋瞭Android應用程序開發的方方麵麵,從GUI、圖形圖像、多媒體、數據持久化到各種通信方式、常用傳感器等內容無所不包,甚至還囊括瞭應用程序測試、國際化和麵嚮非Java程序員的編程方式等內容,自然應用程序開發環境的搭建和程序的發布也不例外。可以說隻要你從事Android開發,無論你打算使用什麼IDE、準備開發什麼樣的項目,都能從本書中找到適閤自己的內容;所謂邏輯順暢,指的是本書的編排彆具匠心,幾乎每一節都是先提齣問題,即該節內容所麵嚮的程序應用背景,然後提齣總體解決思路,最後再按步實施、解決問題。為什麼、怎麼辦、如何解決可以說是貫穿全書的邏輯思路,清晰明瞭,即使你由於時間關係不能精讀全書,也總會在實際開發工作中遭遇“痛點”之時,迴憶起本書中相同或類似的問題場景,快速找到解決方案;重點突齣則是由於本書作者是來自於Android社區的優秀一綫開發人員,對Android程序員在日常開發中容易混淆、迷茫、犯錯、走彎路的種種問題瞭然於胸,並對這類問題的解決方案給予瞭重點“關照”,而對於大傢都耳熟能詳的步驟,不會一而再、再而三地喋喋不休。本書的這三個特點,使其既能成為Android開發新手的入門讀物,又能作為富有經驗的開發人員的案頭工具書,可以說值得每位Android程序員品讀。
全書共有21章,由鬍訓強、夏紅梅和張文娟共同翻譯,其中鬍訓強翻譯瞭第1、2章以及第5~18章,夏紅梅翻譯瞭第3章和第4章,張文娟翻譯瞭第19~21章。囿於譯者的技術和語言水平,書中難免會齣現不準確甚至錯誤之處,如果你發現瞭這些問題,懇請通過郵箱10185014@qq.com告知我們以便改進,在此嚮你錶示感謝!
最後,感謝所有為本書順利付梓而付齣艱辛勞動的人們!
譯 者
2017年9月於廣州
前言
Android是應用於手機和移動運算的“開源革命”,至少是部分革命。為瞭提供開源手機,人們已經進行瞭大量努力,其中大部分成果在很大程度上都已經名存實亡,包括Openmoko Neo FreeRunner、嵌入式QT、Moblin、LiMo、Debian Mobile、Maemo、Firefox OS、Ubuntu Mobile以及開源的Symbian OS和現在銷聲匿跡的HP WebOS。我們也不要忘瞭已被證實是閉源的堅定分子—Apple公司的iOS以及兩個次要角色(從市場占有率而言)—Microsoft公司的Windows Phone以及現在已被拋棄的BlackBerry OS 10。
在所有被提供的産品當中,有兩個脫穎而齣成為主角,其中Android必定占有一席之地!由於其開源許可,因此Android在全世界眾多經濟型手機上都得到瞭使用,據估計Android在世界智能手機市場中占有的份額高達90%。寫作本書是為瞭幫助Android開發人群共享有助於開發齣更好的應用程序的知識,那些在本書中貢獻齣知識的人使得Android開發對於後來者更加簡單。
關於Android
Android是一個移動電話技術平颱,可以為手機、平闆電腦以及其他手持和移動設備(甚至上網本)提供Linux操作係統的強大功能和便攜性、標準高級語言和API的可靠性、可移植性以及實用應用程序的巨大生態係統。Android應用程序大多數都是(利用諸如Eclipse和Android Studio之類的工具)用Java語言編寫的,依賴於Android API進行編譯並被轉換成麵嚮Android虛擬機的字節碼。
因此,從操作係統傢族的角度而言,Android和其他基於Linux的手機項目息息相關。從編程語言角度而言,Android還和BlackBerry的老舊的Java ME手機以及Java及領域更廣的Java企業版應用程序有關。不要說現在所有的BlackBerry設備都能運行Android應用程序,實際上在其把剩餘的智能手機業務外包齣去之前,BlackBerry的最後一批設備隻能運行Android。
現在大傢公認Android占有世界智能手機市場幾乎3/4的份額,但在平闆電腦市場上它還沒有取代Apple公司的iPad。銷售數據隨時都在變化,但是有一點非常明確:Android現在是並且將繼續保持為移動領域的主角之一。
Android還可用於一些專門的平颱。Android Wear將Android的編程模型帶入瞭智能手錶以及諸如健康跟蹤器之類的可穿戴設備。Android Auto則被設計用於控製汽車裏的娛樂單元。Android TV則在智能電視和不那麼智能的電視的控製器上運行。最後,Android Things則被設計用於嵌入式市場,即現在稱為的“物聯網”(Internet of Things, IoT)。這中間的每一個平颱都引人入勝,但為瞭讓本書的篇幅保持在閤理範圍內,我們主要關注“常規的Android”,即麵嚮智能手機和平闆電腦應用程序的Android。
本書讀者對象
本書關注利用Java構建Android應用程序,Java是Android應用程序的原生語言。將Web應用程序打包成移動應用程序當然也是可能的(參見19.10節),但是想利用這種方式獲得有關當前Android所有功能特性的非常重要的100%正確的用戶體驗卻很睏難。
所以本書用到的是Java。我們假定你已經瞭解瞭Java語言的基礎知識,如果沒有,請參閱1.4節。我們還假定你已經瞭解瞭Java標準版API(因為它構成瞭Android運行時庫的基礎)以及Android的基礎知識。雖然你不必非常精通Activity、Intent、Service和ContentProvider等術語,但至少應該熟悉它們。如果不是這樣,我們已經為你準備好瞭補救措施:請參閱1.2節。
本書和Android SDK自帶示例的不同之處在於,書中嘗試更多地關注特定技術的工作原理,而不是給你提供一個完整可運行的例子,這樣的例子既被簡化瞭(使用非常簡單的數據),同時又因為添加進若乾與眼前的問題沒有關係的“巧妙的”特性而復雜化瞭。
本書主要內容
第1章帶你全麵瀏覽一遍設置Android開發環境以及構建幾個眾所周知的“Hello, World”類型的簡單應用程序的所有步驟,“Hello, World”類型程序的概念是由Brian Kernighan率先提齣的。
第2章介紹瞭移動計算中的一些差異之處,這些差異會使從桌麵和企業軟件環境轉型而來的開發人員不太適應。本章還談論瞭移動設計(特彆是Android設計)是如何與那些環境産生差異的。
測試對於一些開發人員而言經常是事後纔想起來的事情,所以我們在第3章中早早地對其進行討論。不這樣做你就會略過它,而這樣做瞭你就會讀到並注意到它。我們探究瞭對單個組件進行單元測試和以一種控製良好的方式對整個應用程序進行全麵測試。
Android為應用程序內部以及跨應用程序通信提供瞭各式各樣的機製。在第4章中我們討論瞭Intent以及廣播接收器、Service、AsyncTask和Handler。
第5章涵蓋瞭一係列與圖形有關的主題,包括在Android中的圖形化繪製和組閤工具的用法,還討論瞭利用桌麵工具創建可被引入已完成的應用程序當中的圖形化圖像、紋理、圖標等。
每個移動應用程序都需要GUI,所以第6章介紹瞭麵嚮Android的GUI開發的主要細節。其中既有以XML形式給齣的示例,也有一些示例以編寫Java代碼進行GUI開發的形式給齣。
第7章介紹瞭所有彈齣式GUI組件—菜單、對話框和Toast,還介紹瞭不會彈齣但同樣是在應用程序窗口外部進行交互的Android消息組件。
列齣數據項在所有平颱上的移動應用程序中都非常常見,第8章關注Android中的“列錶”組件:ListView及其較新的替代品RecyclerView。
Android的多媒體功能非常豐富,第9章展示瞭如何使用其中一些最重要的功能。
第10章展示瞭如何把數據保存到文件、數據庫等當中—當然,也介紹瞭如何從文件和數據庫等取迴數據。其他通信機製是關於允許對數據進行受控製的訪問,這種訪問通常發生在SQL數據庫當中。該章還嚮你展示瞭如何通過與URL一樣簡單卻無處不在的事物讓應用程序數據可為其他應用程序所用,此外還展示瞭如何利用各種基於雲端的服務存儲數據。
Android是作為移動電話的操作係統問世的,第11章展示瞭如何控製電話通信組件並與其交互,當前大多數移動設備上都有電話通信組件。
在大多數情況下,移動設備一直都在綫並且一直都與網絡保持連接,這對人們如何使用它們以及如何看待它們有著巨大影響。第12章展示瞭為傳統的聯網應用程序編寫代碼,緊接其後的第13章則討論瞭遊戲和動畫,第14章討論瞭社交網絡。
現在無處不在的全球定位係統(Global Positioning System, GPS)同樣也對移動應用程序如何工作具有重要影響,第15章討論瞭如何查找設備的位置、如何從Google和OpenStreetMap獲取地圖數據,以及應用程序如何以剛剛正在探討的方式清楚自己的位置。
第16章談論瞭內置在大多數Android設備中的傳感器以及如何利用它們。
第17章不止討論瞭如何把藍牙耳機連接到手機上,還討論瞭藍牙帶來的低功耗近距離網絡連接功能。
Android設備在能為開發人員提供多少控製方麵可能獨一無二,在第18章中探討瞭其中的一些觀點,因為Android是基於Linux的,所以該章中有幾節討論瞭傳統的Unix/Linux命令和實用工具。
在第19章中,我們討論瞭利用其他編程語言編寫Android應用程序的全部或部分問題,其中的示例包括C、Perl、Python、Lisp以及其他語言。
盡管本書的原版是英文版,並且英語是全世界使用最廣的語言,但它卻遠不是唯一的語言。大多數最終用戶都希望應用程序具有他們母語版本的文本以及對於他們而言具有恰當文化形式的圖標。第20章詳細討論瞭有關語言和文化以及如何將這兩者與Android關聯起來的話題。
最後,大多數Android開發人員都希望其他人能使用他們的應用程序,但是如果用戶找不到這個應用程序就沒法用瞭。第21章展示瞭如何通過Google Play應用商店發布準備好的應用程序,以及利用Google Play和其他應用市場嚮將會使用應用程序的人推介應用程序。
本書約定
本書使用如下所示的一些排版約定:
斜體(Italic)
錶示新術語、URL、電子郵件地址、文件名和文件擴展名。
等寬字體(Constant width)
用於程序列錶以及在段落裏錶示程序要素(例如:變量名或函數名、數據庫、數據類型、環境變量、語句和關鍵字)。
等寬粗體(Constant width bold)
顯示命令或其他應由用戶逐字輸入的文本。
等寬斜體(Constant width italic)
顯示應被用戶提供的值或由上下文決定的值所代替的文本。
該圖示錶示小貼士或建議。
該圖示錶示一般性的注意事項。
該圖示錶示警告或應引起注意之處。
在此處給齣我們的第一個警告:特定章節中所用的術語“我”反映的是該章節作者的觀點或經驗,並不一定是本書編輯的觀點或經驗。
獲取和使用代碼示例
本書中的代碼示例既有從完整應用程序中摘取齣來的若乾行代碼,也有完整的可運行的應用程序。對於那些隻有“幾行”代碼的示例而言,你不應指望能夠就我們所提供的代碼進行編譯,這幾行代碼是打算融入到你的應用程序當中的。所有能夠編譯的示例都歸並到瞭一個GitHub代碼庫當中,這是獲取源代碼並保持更新的推薦方式,可以通過https://github.com/IanDarwin/Android-Cookbook-Examples訪問這個代碼庫,代碼庫中的每個文件夾都包含一個示例程序項目。如果你訪問這個網頁就會看到,GitHub允許你利用giy clone命令遷齣源代碼庫。同樣,網頁還為你提供瞭一個選項,可將整個代碼庫下載為一個(很大的)ZIP文件,並在網絡瀏覽器中查看代碼庫的各個部分,使用Git可以讓你獲取代碼修正和更新。
各章節都為源代碼提供瞭下載地址,這些源代碼保存在其他的公共代碼庫當中,對於電子書用戶而言,在每個章節的結尾處都列齣瞭這些下載地址的超鏈接。在每一個案例當中,歸檔文件都必定包含一個完整的Eclipse或Android Studio項目。我們沒有對這些代碼庫進行控製,如果有人發現其中的示例不完整或無法運行,請參考GitHub代碼庫。
幾乎所有最初針對Eclipse編寫的代碼示例現在都包含一個build.gradle文件,所以可以在Android Studio中直接打開這些代碼示例(參見1.12節)。一般而言,最初用Android Studio編寫的代碼示例如果不重新組織項目結構,就不能為Eclipse所用。
怎樣確定能如何構建一個項目
如果一個項目的頂級目錄包含:
AndroidManifest.xml和.project
項目可用Eclipse打開。
build.gradle
項目可用Android Studio打開或用命令行Gradle工具編譯。
pom.xml
可用命令行Maven(或用IDE內的Maven)編譯。
build.xml
項目或許仍然可用比較老舊的And構建工具編譯。
請參見圖P-1查看一下典型項目布局的示例。
示例的GitHub代碼庫的頂級目錄當中包含一個README文件,該文件可在文件和文件夾列錶的下方看到,它對哪個項目可用哪個工具構建進行瞭總結。其中要注意Notes一列,因為該列中列齣瞭構建示例項目時隨時可能遇到的一些已知的問題。
圖P-1:典型的Eclipse和Android Studio項目的項目布局
本書是想幫助你完成工作,總而言之,你可以在自己的程序和文檔中使用本書中的代碼。除非你復製瞭代碼中非常重要的部分,否則不必聯係我們得到許可。例如,編寫一個用到瞭本書所提供的若乾代碼的程序並不需要得到許可。而銷售或發行O扲eilly齣版書籍所帶示例的CD-ROM必須獲得許可。援引本書或示例代碼作為例證迴答問題不需要得到許可。在你的産品文檔中大量引入本書的示例代碼必須獲得許可。
我們很感謝但並不強求注明齣處,注明齣處一般包含書名、作者、齣版商以及ISBN,例如:“Android Cookbook, Second Edition, by Ian F. Darwin (O扲eilly). Copyright 2017 O扲eilly Media, Inc., 978-1-449-37443-3.”。
如果你感覺自己對代碼示例的使用在閤理使用或上述許可範圍之外,請隨時通過郵箱permissions@oreilly.com聯係我們。
我們的聯係方式
請嚮齣版商提交有關本書的評論和問題:
O扲eilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)
我們推齣瞭針對本書的網頁,其中列齣瞭勘誤錶、示例以及附加信息,你可以通過http://bit.ly/android-cookbook-2e訪問該網頁。
要想就本書發錶評論或谘詢技術性問題,可請嚮bookquestions@oreilly.com發送電子郵件。
要想瞭解更多有關我們的書籍、課程、會議和新聞,請瀏覽我們的網站http://www.oreilly.com。
可以通過https://facebook.com/oreilly在Facebook上找到我們。
可以通過https://twitter.com/oreillymedia在Twitter上找到我們。
可以通過https://www.youtube.com/oreillymedia在YouTube上觀看我們的視頻。
緻謝
我想感謝來自Android社區的數十位開發人員,他們為本書的第一版貢獻瞭相當多的章節,他們是:Amir Alagic、Jim Blackler、Luis Vitorio Cargnini、Rupesh Chavan、Adrian Cowham、Wagied Davids、Nidhin Jose Davis、David Dawes、Enrique Diaz、Marco Dinacci、Claudio Esperanca、Kurosh Fallahzadeh、Daniel Fowler、Jonathan Fuerth、Sunit Katkar、Roger Kind Kristiansen、Vladimir Kroz、Alex Leffelman、Ulysses Levy、Thomas Manthey、Emaad Manzoor、Zigurd Mednieks、Keith Mendoza、Roberto Calvo Palomino、Federico Paolinelli、Johan Pelgrim、Catarina Reis、Mike Rowehl、Pratik Rupwal、Oscar Salguero、Ashwini Shahapurkar、Shraddha Shravagi、Rachee Singh、Saketkumar Srivastav、Corey Sunwold、Kailuo Wang和Colin Wilcox。
感謝Mike Way,他為第2版貢獻瞭有關訪問許可的一節(2.2節),還要感謝Daniel Fowler在第2版中將他所寫的章節進行瞭更新。
我還必須為本書齣版做齣貢獻的O扲eilly工作人員錶示感謝,包括我的編輯Mike Loukides、Courtney Nash、Meghan Blanchette和Dawn Schanafelt,還有參與齣版工作的Adam Witwer和Sarah Schneider,以及策劃編輯Teresa Elsey,她領導瞭整個齣版過程,還有文字編輯Audrey Doyle,他勞心費力地閱讀瞭每個單詞和短語,以及Stacie Arellano,他對本書進行瞭再次校對。還要感謝設計師Karen Montgomery和David Futato以及插圖師Robert Romano和Rebecca Demarest以及我可能忽略瞭沒有提到的所有人—你知道我說的是誰!Colleen Lobner、Kim Cofer、Rachel Head和Judith McConville也對本書第2版做齣瞭貢獻。
我的小兒子Andrej Darwin在本書第1版的章節編輯階段幫助我完成瞭一些後期管理任務,感謝全傢的支持。
最後要感謝我的兩位技術評審:Greg Ostravich和Zettie Chinfong,盡管本書現在仍然不可避免地有錯漏之處,但是如果沒有他們,錯漏之處就要多得多。不僅如此,他們為瞭本書的第2版又全都迴來瞭!Rick Isaacs對很多章節又進行瞭一次評審和測試。還要感謝很多指齣第1版首印勘誤的讀者,特彆是Anto Jurkovic和Joseph C. Eddy,這些錯誤在這一版都得到瞭改正,但書中肯定尚存一些錯誤,懇請讀者批評指正。
上麵我所提到的所有人,感謝你們!
评分
评分
评分
评分
评分
评分
评分
评分
本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有