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