第1章Android開發概述1
1.1Android及其前景1
1.2Android的優勢及歷史發展1
1.2.1Android的優勢1
1.2.2Android發行版本2
1.3Android系統架構3
1.4SL4A及腳本引擎4
1.4.1SL4A是什么4
1.4.2SL4A工作原理4
1.4.3腳本和腳本引擎7
1.4.4Android支持的腳本引擎8
1.5Android 腳本開發環境9
1.5.1Java JDK9
1.5.2Android SDK安裝9
1.5.3模擬器的創建和管理10
1.5.4SL4A與腳本引擎的安裝11
1.5.5運行第一個Android腳本程序11
1.5.6腳本編輯器13
1.6SL4A API數據標準13
1.7Android 輔助開發工具14
1.7.1DDMS14
1.7.2adb調試橋15第2章Android JavaScript腳本基礎17
2.1JavaScript腳本編程基礎17
2.1.1變量17
2.1.2數據類型18
2.1.3運算符和表達式20
2.2JavaScript控制語句262.2.1條件語句26
2.2.2循環語句29
2.3JavaScript數組、函數和對象33
2.3.1數組33
2.3.2函數33
2.3.3對象36
2.4XML和JSON39
2.4.1什么是XML39
2.4.2XML基礎40
2.4.3什么是JSON41
2.4.4JSON基礎41
2.5Rhino引擎與Java語言43
2.5.1搭建Rhino開發環境43
2.5.2Rhino和Java類庫、數組、對象和接口44第3章SL4A UI API與界面開發45
3.1警告對話框和對話框按鈕47
3.2請求用戶輸入信息和密碼對話框48
3.3列表49
3.4單選和多選按鈕51
3.5時間設置對話框54
3.6日期設置對話框55
3.7水平進度條56
3.8搜索進度條57
3.9等待完成進度條58第4章Android UI布局60
4.1界面布局管理60
4.2LinearLayout布局67
4.3FrameLayout布局70
4.4AbsoluteLayout布局72
4.5RelativeLayout布局72
4.6TableLayout布局76第5章Android Widget80
5.1TextView80
5.2EditText82
5.3Button87
5.4ImageButton89
5.5RadioButton和CheckBox92
5.6ToggleButton96
5.7DataPicker和TimePicker98
5.8ImageView100
5.9ProgressBar、SeekBar和RatingBar102
5.10Spinner和ListView106
5.11Menu110第6章事件響應處理114
6.1事件處理模型114
6.2事件API115
6.3事件數據結構117
6.4事件處理121
6.4.1菜單事件處理121
6.4.2按鈕事件處理123
6.4.3列表事件處理126
6.4.4鍵盤事件處理128
6.4.5其他事件處理131第7章數據持久化135
7.1首選項135
7.2SQLite數據庫140
7.2.1SQLite是什么140
7.2.2SQL語法141
7.2.3面向腳本的SQLite3框架144
7.2.4使用SQL操作SQLite3145
7.3文件持久化146
7.3.1JavaScript與Java文件類146
7.3.2文件編程過程148
7.3.3文件持久化編程149
7.4網絡持久化150
7.4.1JavaScript與Java網絡類150
7.4.2網絡編程過程152
7.4.3網絡持久化編程152第8章Android的4個基本組件155
8.1意圖155
8.1.1意圖是什么155
8.1.2意圖數據結構156
8.1.3構造意圖及通用意圖159
8.1.4意圖的啟動方式160
8.2活動161
8.2.1活動是什么161
8.2.2啟動活動162
8.2.3活動返回值設置163
8.3廣播164
8.3.1廣播是什么164
8.3.2廣播的注冊和啟動164
8.3.3常見系統廣播166
8.4內容168
8.4.1內容是什么168
8.4.2內容的查詢168
8.4.3聯系人內容169
8.4.4系統提供的內容170
8.5后臺服務170第9章通用任務、應用管理和系統設置172
9.1通用任務172
9.1.1一維碼和二維碼掃描172
9.1.2瀏覽任務175
9.1.3聯系人列表瀏覽176
9.1.4地圖瀏覽177
9.1.5HTML瀏覽178
9.1.6查詢任務178
9.2應用管理179
9.2.1啟動應用179
9.2.2停止應用180
9.2.3應用的包列表181
9.2.4應用的類列表182
9.3喚醒鎖183
9.3.1什么是喚醒鎖183
9.3.2喚醒鎖申請和睡眠檢測184
9.4系統設置187
9.4.1聲音和震動設置187
9.4.2屏幕設置189
9.4.3飛行模式設置190第10章通信與傳感器192
10.1電話通信192
10.1.1手機基本概念192
10.1.2電話API193
10.1.3手機開發196
10.2短信通信198
10.2.1短消息API198
10.2.2短消息系統開發200
10.3WiFi無線通信201
10.3.1什么是WiFi及WiFi工作過程201
10.3.2WiFi API201
10.4藍牙無線通信202
10.4.1什么是藍牙及藍牙工作流程202
10.4.2藍牙API及其應用203
10.5傳感設備208
10.5.1GPS概念和API208
10.5.2GPS測距和定位開發210
10.5.3模擬器與GPS215
10.5.4高德地圖服務216
10.5.5方向傳感器概念和API217
10.5.6方向傳感器物體傾斜開發218
10.5.7加速度傳感器概念和API219
10.5.8加速度傳感器手搖應用開發220
10.5.9磁力傳感器概念和API221
10.5.10磁力傳感器磁場檢測開發221第11章多媒體和語音處理222
11.1相機拍攝222
11.1.1視頻拍攝API222
11.1.2在線拍攝開發223
11.2多媒體225
11.2.1多媒體簡述225
11.2.2多媒體錄制API226
11.2.3多媒體錄制應用228
11.2.4多媒體播放API229
11.2.5多媒體播放器開發231
11.3語音合成和語音識別API236
11.3.1什么是語音合成236
11.3.2語音合成引擎236
11.3.3語音合成API及其應用237
11.3.4什么是語音識別239
11.3.5語音識別引擎240
11.3.6語音識別API及其應用241第12章Android GUI242
12.1HTML和Android GUI242
12.2HTML基礎243
12.3CSS基礎244
12.4HTML和JavaScript通信245
12.5HTML實現Android GUI范例250第13章腳本的運行方式及常見錯誤問題254
13.1APK模板發布腳本254
13.1.1APK模板是什么254
13.1.2代理模式下的模板工作時序254
13.1.3APK模板類及對外接口設計257
13.1.4APK模板應用257
13.2二維碼發布腳本260
13.3SL4A管理腳本260
13.4Android 腳本中文編碼問題261
13.5Android 環境搭建不能訪問谷歌網站問題262
13.5.1環境搭建失敗問題262
13.5.2Web搭建Android環境原理262
13.5.3環境搭建過程263
13.6Android 網絡緩存帶來的問題265參考文獻266
5Android Widget
Widget也稱微件,其最初的概念是1998年一個叫Rose的蘋果計算機工程師提出的,直到2003年Widget在蘋果操作系統上以小工具形式出現的時候才正式為人們所知,隨后無數大公司都開始接受并應用這一思路。Widget實際上是一個小型的應用程式,它可以是一個時鐘,一個日記簿,一段視頻,天氣預報,一個Flash游戲等小程序。簡單地說,Widget可以理解為“應用小插件”,一種可供用戶制作和自由下載的小工具,它包含娛樂、工作和學習等多種實用功能。目前的Widget應用大體可分為三種: Desktop Widget、Web Widget以及Mobile Widget。Desktop Widget可以在計算機桌面上獨立執行,用戶無須通過瀏覽器便可連接到網絡。時至今日,很多人已對蘋果、雅虎、Google及微軟開發的Desktop Widget比較熟悉。通過這些小型應用軟件,用戶可把各類網上信息(如天氣、新聞頭條、圖片等)放到桌面上。Mobile Widget實際上是運行在移動設備上的Desktop Widget。
為了提高開發效率,Android系統提供有標準的開發類Widget,這類Widget就是開發中常用的控件。雖然控件是一個擁有一定功能的Widget,但控件不能獨立運行,它需要嵌到應用程序中才可以運行?丶菍祿头椒ǖ姆庋b,控件可以有自己的屬性和方法,屬性是控件數據的簡單訪問者,方法是控件一些可見的功能?丶茿ndroid用戶界面中重要的組成元素之一,主要包括文本框、按鈕、單選按鈕、多選按鈕等,能夠實現人機交互,如顯示文本、輸入編輯文本、選擇選項等。
5.1TextView
TextView控件用來向用戶顯示一行或多行的文本或者標簽,它是不可編輯的。TextView控件中包含很多屬性,如文本的顏色和大小等屬性,在XML文件中可以對屬性設置相應的屬性值,以達到相應的效果。TextView控件常用屬性如表51所示。
下面通過例51說明TextView控件。本例首先描述了一個線性布局,然后在布局中添加了一個TextView控件,用來顯示文本。本例由兩個文件組成,一個是用戶界面XML文件mylayout.xml,另一個是JavaScript文件test.js。表51TextView常用屬性和說明
屬性說明android:gravity設置控件中文字對齊方向,其值為left、center和rightandroid:height設置控件高度android:width設置控件寬度android:hint當控件顯示內容為空時顯示的文本(即提示信息)android:textColorHint設置提示信息文字的顏色,默認為灰色,與hint一起使用android:text設置控件上的文本內容android:textColor設置文本顏色android:textSize設置文本字體大小android:typeface設置文本字體,Android系統默認支持三種字體,分別為: sans,serif,monospace,除此之外還可以使用其他字體文件(*.ttf)android:background設置控件背景顏色android:textStyle設置字體為粗體和斜體,取值為bold(粗體)和italic(斜體),值可以組合,組合時值之間要加|符號,例如,android:textStyle="bold|italic"表示文本為粗斜體android:lines設置文本的行數,設置兩行就顯示兩行,即使第二行沒有數據android:autoLink當文本為URL鏈接/email/電話號碼/map時,設置是否文本顯示為可單擊的鏈接?蛇x值有none/web/email/phone/map/all【例51】(代碼位置: \5\textview)
文件mylayout.xml:
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:text="這是TextView控件,用來顯示文本,文字居中對齊。"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25px"
android:textColor="#fff00000"
android:background="#00ff00"
android:textStyle="bold"
android:gravity="center"
android:height="200px"
/>
文件test.js: load("/sdcard/com.googlecode.rhinoforandroid/extras/rhino/android.js");
var droid=new Android();
var layout=file_get_contents("/sdcard/sl4a/scripts/mylayout.xml");
droid.fullShow(layout);
droid.eventWait(10000);
function file_get_contents(fileName) {
var file=new java.io.File(fileName);
var reader=new java.io.BufferedReader(new java.io.FileReader(file));
var tempString=null;
var fileString="";
//一次讀入一行,直到讀入null時文件結束
while ((tempString=reader.readLine()) !=null) {
fileString=fileString+tempString ;
}
reader.close();
return fileString;
}
在文件mylayout.xml中,首先定義了一個垂直線性布局,然后在該布局中通過TextView標簽添加了一個文本顯示控件,通過屬性android:text設置文本顯示內容為“這是TextView控件,用來顯示文本,文字居中對齊。”,通過屬性android:textSize設置文本字體大小為“25px”,通過屬性android:textColor設置文本字體顏色,通過屬性android:textStyle設置文本字體為粗體。
程序運行之前,先把文件mylayout.xml和文件test.js復制到手機或模擬器中的/sdcard/sl4a/scripts/目錄,然后再運行test.js,這時屏幕上會出現一個文本控件,顯示文本內容為“這是TextView控件,用來顯示文本,文字居中對齊!薄
5.2EditText
用戶使用手機編輯發送信息時,屏幕上會出現一個文本編輯框,用來輸入、編輯信息。文本編輯框控件也就是EditText控件,它是可編輯的文本控件,用戶可以在該控件中編輯要輸入的內容,然后該控件接收用戶的輸入,并把用戶的輸入傳輸給Android應用處理,實現人機交互。EditText控件是Android應用中非常重要的控件,應用非常廣泛。例如,用戶在登錄QQ時,需要通過密碼編輯框輸入密碼;用戶在撥打電話時,需要通過文本編輯框輸入電話號碼等。
用戶使用EditText控件時,輸入的文本內容可以是單行文本,也可以是多行文本,可以是不同的類型,如數字、文字、時間日期、郵箱地址、密碼等,這時控件的屬性android:inputType顯得尤其重要,在XML文件中可以通過設置屬性android:inputType的屬性值,指定EditText控件接收相應類型的文本,同時,EditText控件還會讓虛擬鍵盤來適應輸入框中內容的類型。屬性android:inputType的值及含義說明如表52所示。表52android:inputType值及含義
屬 性 值含義(文本類型)屬 性 值含義(文本類型)text任何文本textPassword密碼輸入number數字datetime時間日期numberDecimal帶小數點的數字time時間phone電話號碼date日期textEmailAddress郵箱地址格式textMultiLine多行輸入textUri網址singleLine單行輸入下面通過實例5.2描述了EditText控件。該例中通過屬性android:inputType="text"設置該控件可接受任何文本,沒有格式類型約束。本例包含兩個文件,一個是XML布局文件mylayout.xml;另一個是PHP文件test.php。
……