本書(shū)從Android應(yīng)用出發(fā), 深入講解Android Studio設(shè)計(jì)應(yīng)用程序的基礎(chǔ)知識(shí)。本書(shū)共分9章, 詳細(xì)敘述了Android Studio及其開(kāi)發(fā)過(guò)程, 圖形用戶(hù)界面設(shè)計(jì) , 多個(gè)圖形界面的程序設(shè)計(jì), 數(shù)據(jù)存儲(chǔ)技術(shù), 圖形與多媒體處理技術(shù), 后臺(tái)服務(wù)與網(wǎng)絡(luò)通信, 地圖服務(wù)及傳感檢測(cè)技術(shù), 應(yīng)用項(xiàng)目開(kāi)發(fā)實(shí)例。本書(shū)內(nèi)容涵蓋了Android的流行版本和新版本的主要功能和特性, 全面介紹了Android手機(jī)編程的基本原理、技術(shù)和應(yīng)用模式。
。1)易學(xué)易懂。本書(shū)面向Android系統(tǒng)的初學(xué)者,在敘述方式上淺顯易懂,摒棄枯燥的理論,盡可能使用圖示加以說(shuō)明。對(duì)每一個(gè)知識(shí)點(diǎn),都配了相應(yīng)的例題。所有例題均短小精悍,適合課堂教學(xué)講授。讀者學(xué)完每一章內(nèi)容后都可以編寫(xiě)出相應(yīng)功能的程序。
。2)解釋詳細(xì)。對(duì)每一個(gè)例題,均進(jìn)行了詳細(xì)分析和解釋?zhuān)瓤梢詭椭x者學(xué)習(xí)理解知識(shí)和概念,大大降低學(xué)習(xí)難度,又具有啟發(fā)性。
(3)Java語(yǔ)言零基礎(chǔ)學(xué)習(xí)。為了幫助沒(méi)有Java語(yǔ)言基礎(chǔ)的讀者學(xué)習(xí)Android系統(tǒng),特別安排了一章介紹Java基礎(chǔ)知識(shí)的內(nèi)容。
。4)配有視頻教學(xué) 。書(shū)中大部分例題均錄制了視頻教學(xué),詳細(xì)地記錄了設(shè)計(jì)的操作過(guò)程,對(duì)重點(diǎn)和難點(diǎn)問(wèn)題作了詳細(xì)講解,幫助讀者更加輕松、迅速地理解和掌握本書(shū)內(nèi)容。
與第1版相比,第2版的最大修改之處是把開(kāi)發(fā)工具Eclipse換成了Android Studio。這主要考慮Android Studio是Google公司推出的專(zhuān)門(mén)為Android“量身定制”的開(kāi)發(fā)工具,是Google大力支持的一款基于IntelliJ IDEA改造的IDE集成開(kāi)發(fā)環(huán)境,可以說(shuō)它是Android開(kāi)發(fā)工具的未來(lái)。
第2版刪除了第1版中Java語(yǔ)言基礎(chǔ)知識(shí)簡(jiǎn)介的章節(jié),增加了訪(fǎng)問(wèn)Web服務(wù)器數(shù)據(jù)的內(nèi)容。另外,由于Android Studio與Eclipse的目錄結(jié)構(gòu)和菜單差異很大,因此很多例題在介紹操作時(shí)做了修改。
第2版全書(shū)共分9章,第1章主要講解Android Studio開(kāi)發(fā)環(huán)境的搭建,并介紹了開(kāi)發(fā)Android應(yīng)用程序的步驟和應(yīng)用程序框架的結(jié)構(gòu);第2~3章講解如何使用布局和視圖創(chuàng)建用戶(hù)界面,介紹了用戶(hù)圖形界面的常用組件;第4章介紹圖形與多媒體處理技術(shù),介紹了繪制幾何圖形的基本方法、處理觸摸屏事件的方法,還詳細(xì)討論了音頻播放和視頻播放的設(shè)計(jì)以及錄音、照相技術(shù),并詳細(xì)講解了在Android中實(shí)現(xiàn)動(dòng)畫(huà)的技術(shù);第5章介紹后臺(tái)服務(wù)與系統(tǒng)服務(wù),以及系統(tǒng)功能調(diào)用;第6章介紹網(wǎng)絡(luò)通信技術(shù),介紹了Web視圖以及基于TCP協(xié)議的網(wǎng)絡(luò)程序設(shè)計(jì)、基于HTTP協(xié)議的網(wǎng)絡(luò)程序設(shè)計(jì)等網(wǎng)絡(luò)編程技術(shù);第7章介紹應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器,并介紹了JSON數(shù)據(jù)格式和一個(gè)網(wǎng)絡(luò)音樂(lè)播放器設(shè)計(jì)實(shí)例;第8章介紹數(shù)據(jù)存儲(chǔ)技術(shù),介紹了SQLite數(shù)據(jù)庫(kù)存儲(chǔ)方式、文件存儲(chǔ)方式和XML文件的SharedPreferences存儲(chǔ)方式,還介紹了訪(fǎng)問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù)的方法;第9章講解地圖服務(wù)與傳感器檢測(cè)技術(shù),地圖服務(wù)主要介紹實(shí)現(xiàn)地圖視圖的基本方法,傳感器檢測(cè)主要介紹重力加速度的應(yīng)用。
本書(shū)提供了電子課件和所有例題的源代碼,掃描每章提供的二維碼可觀看教學(xué)視頻。
張思民
2017年5月
第1章 Android系統(tǒng)及其開(kāi)發(fā)過(guò)程 1
1.1 Android系統(tǒng)概述 1
1.1.1 Android系統(tǒng)及特點(diǎn) 1
1.1.2 Android系統(tǒng)的體系結(jié)構(gòu) 2
1.1.3 Android開(kāi)發(fā)的分類(lèi) 3
1.2 搭建Android Studio開(kāi)發(fā)環(huán)境 4
1.2.1 安裝Android Studio前的必要準(zhǔn)備 4
1.2.2 安裝Android Studio詳解 5
1.2.3 設(shè)置環(huán)境變量 7
1.3 Android API和在線(xiàn)幫助文檔 8
1.4 Android應(yīng)用程序的開(kāi)發(fā)過(guò)程 9
1.4.1 開(kāi)發(fā)Android應(yīng)用程序的一般過(guò)程 9
1.4.2 生成Android應(yīng)用程序框架 10
1.4.3 編寫(xiě)代碼生成MainActivity.java 12
1.4.4 在模擬器中運(yùn)行應(yīng)用程序 13
1.5 Android項(xiàng)目結(jié)構(gòu) 13
1.5.1 目錄結(jié)構(gòu) 13
1.5.2 Android應(yīng)用程序結(jié)構(gòu)分析 19
1.6 Android應(yīng)用程序設(shè)計(jì)示例 21
習(xí)題1 23
第2章 Android用戶(hù)界面的設(shè)計(jì) 24
2.1 用戶(hù)界面組件包widget和View類(lèi) 24
2.2 文本標(biāo)簽TextView與按鈕Button 25
2.2.1 文本標(biāo)簽 25
2.2.2 按鈕及按鈕處理事件 27
2.3 文本編輯框 32
2.4 Android布局管理 35
2.4.1 布局文件的規(guī)范與重要屬性 36
2.4.2 常見(jiàn)的布局方式 37
2.5 進(jìn)度條和選項(xiàng)按鈕 46
2.5.1 進(jìn)度條 46
2.5.2 選項(xiàng)按鈕 48
2.6 圖像顯示類(lèi)ImageView與畫(huà)廊組件類(lèi)Gallery 55
2.6.1 圖像顯示類(lèi)ImageView 55
2.6.2 畫(huà)廊組件類(lèi)Gallery與圖片切換器ImageSwitcher 59
2.7 消息提示類(lèi)Toast 64
2.8 列表組件 67
2.8.1 列表組件類(lèi)ListView 67
2.8.2 ListActivity類(lèi) 69
2.9 滑動(dòng)抽屜組件類(lèi)SlidingDraw 72
習(xí)題2 76
第3章 多個(gè)用戶(hù)界面的程序設(shè)計(jì) 78
3.1 頁(yè)面的切換與傳遞參數(shù)值 78
3.1.1 傳遞參數(shù)組件Intent 78
3.1.2 Activity頁(yè)面的切換 78
3.1.3 應(yīng)用Intent在Activity頁(yè)面之間傳遞數(shù)據(jù) 82
3.2 菜單設(shè)計(jì) 86
3.2.1 選項(xiàng)菜單 86
3.2.2 上下文菜單 89
3.3 對(duì)話(huà)框 91
3.3.1 消息對(duì)話(huà)框AlertDialog 91
3.3.2 其他幾種常用對(duì)話(huà)框 96
習(xí)題3 100
第4章 圖形與多媒體處理 101
4.1 繪制幾何圖形 101
4.1.1 幾何圖形繪制類(lèi) 101
4.1.2 幾何圖形的繪制過(guò)程 102
4.1.3 自定義組件 107
4.2 觸摸屏事件的處理 110
4.2.1 簡(jiǎn)單的觸摸屏事件 110
4.2.2 手勢(shì)識(shí)別 116
4.3 音頻播放 120
4.3.1 多媒體處理包 120
4.3.2 多媒體處理播放器MediaPlayer 120
4.3.3 播放音頻文件 121
4.4 視頻播放 127
4.4.1 應(yīng)用媒體播放器播放視頻 127
4.4.2 應(yīng)用視頻視圖播放視頻 130
4.5 錄音與拍照 133
4.5.1 用于錄音、錄像的MediaRecorder類(lèi) 133
4.5.2 錄音示例 134
4.5.3 拍照 137
4.6 動(dòng)畫(huà)技術(shù) 142
4.6.1 動(dòng)畫(huà)組件類(lèi) 142
4.6.2 補(bǔ)間動(dòng)畫(huà)Tween Animation 143
4.6.3 屬性動(dòng)畫(huà)Property Animation 148
習(xí)題4 152
第5章 后臺(tái)服務(wù)與系統(tǒng)服務(wù) 153
5.1 后臺(tái)服務(wù)Service 153
5.2 信息廣播機(jī)制Broadcast 157
5.3 系統(tǒng)服務(wù) 166
5.3.1 Android的系統(tǒng)服務(wù) 166
5.3.2 系統(tǒng)通知服務(wù)Notification 167
5.3.3 系統(tǒng)定時(shí)服務(wù)AlarmManager 169
5.3.4 系統(tǒng)功能的調(diào)用 172
習(xí)題5 175
第6章 網(wǎng)絡(luò)通信技術(shù) 176
6.1 Web視圖 176
6.1.1 瀏覽器引擎WebKit 176
6.1.2 Web視圖對(duì)象 176
6.1.3 調(diào)用JavaScript 180
6.2 基于TCP協(xié)議的網(wǎng)絡(luò)程序設(shè)計(jì) 186
6.2.1 網(wǎng)絡(luò)編程的基礎(chǔ)知識(shí) 187
6.2.2 利用Socket設(shè)計(jì)客戶(hù)機(jī)/服務(wù)器系統(tǒng)程序 191
6.2.3 應(yīng)用Callable接口實(shí)現(xiàn)多線(xiàn)程Socket編程 196
6.3 基于HTTP協(xié)議網(wǎng)絡(luò)程序設(shè)計(jì) 200
6.3.1 建立PHP服務(wù)器網(wǎng)站 200
6.3.2 應(yīng)用HttpURLConnection訪(fǎng)問(wèn)Web服務(wù)器 200
習(xí)題6 210
第7章 應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器 211
7.1 Volley框架及其應(yīng)用 211
7.1.1 Volley包的下載與安裝 211
7.1.2 JSON數(shù)據(jù)格式簡(jiǎn)介 212
7.1.3 Volley的工作原理和幾個(gè)重要對(duì)象 216
7.1.4 Volley的基本使用方法 217
7.2 應(yīng)用Volley框架設(shè)計(jì)網(wǎng)絡(luò)音樂(lè)播放器 221
習(xí)題7 226
第8章 數(shù)據(jù)存儲(chǔ)技術(shù) 227
8.1 SQLite數(shù)據(jù)庫(kù) 227
8.1.1 SQLite數(shù)據(jù)庫(kù)簡(jiǎn)介 227
8.1.2 管理和操作SQLite數(shù)據(jù)庫(kù)的對(duì)象 228
8.1.3 SQLite數(shù)據(jù)庫(kù)的操作命令 228
8.2 文件的處理 240
8.2.1 輸入/輸出流 240
8.2.2 處理文件流 241
8.3 輕量級(jí)存儲(chǔ)SharedPreferences 248
8.4 訪(fǎng)問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù) 250
習(xí)題8 255
第9章 地圖服務(wù)與傳感器檢測(cè)技術(shù) 256
9.1 電子地圖服務(wù)的應(yīng)用程序開(kāi)發(fā) 256
9.1.1 Android地圖的SDK開(kāi)發(fā)包的下載以及Key的申請(qǐng) 256
9.1.2 顯示地圖的應(yīng)用程序示例 259
9.2 傳感器檢測(cè)技術(shù) 262
9.2.1 傳感器簡(jiǎn)介 262
9.2.2 加速度傳感器的應(yīng)用示例 264
習(xí)題9 273
多個(gè)用戶(hù)界面的程序設(shè)計(jì)
3.1 頁(yè)面的切換與傳遞參數(shù)值
3.1.1 傳遞參數(shù)組件Intent
Intent是Android系統(tǒng)的一種運(yùn)行時(shí)的綁定機(jī)制,在應(yīng)用程序運(yùn)行時(shí)連接兩個(gè)不同組件。在Android 的應(yīng)用程序中不管是頁(yè)面切換還是傳遞數(shù)據(jù)或是調(diào)用外部程序都可能要用到Intent。Intent負(fù)責(zé)對(duì)應(yīng)用中某次操作的動(dòng)作、動(dòng)作涉及的數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述負(fù)責(zé)找到對(duì)應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。因此可以將Intent理解為不同組件之間通信的“媒介”,其專(zhuān)門(mén)提供組件互相調(diào)用的相關(guān)信息。
Intent的屬性有動(dòng)作(Action)、數(shù)據(jù)(Data)、分類(lèi)(Category)、類(lèi)型(Type)、組件(Compent)以及擴(kuò)展(Extra),其中最常用的是Action屬性。
例如:
Intent.ACTION_MAIN 表示標(biāo)識(shí)Activity為一個(gè)程序的開(kāi)始。
Intent.ACTION_GET_CONTENT 表示允許用戶(hù)選擇圖片或錄音等特殊種類(lèi)的數(shù)據(jù)。
Intent.ACTION_SEND 表示發(fā)送郵件的action動(dòng)作。
Telephony.SMS_RECEIVED 表示接收郵件的action動(dòng)作。
Intent.ACTION_ANSWER 表示處理呼入的電話(huà)。
Intent.Action_CALL_BUTTON 表示按“撥號(hào)”鍵。
Intent.Action_CALL 表示呼叫指定的電話(huà)號(hào)碼。
3.1.2 Activity頁(yè)面的切換
Activity跳轉(zhuǎn)與傳遞參數(shù)值主要通過(guò)Intent類(lèi)協(xié)助實(shí)現(xiàn)。在一個(gè)Activity頁(yè)面中啟動(dòng)另一個(gè)Activity頁(yè)面的運(yùn)行是最簡(jiǎn)單的Activity頁(yè)面切換方式。其步驟如下:
(1)創(chuàng)建一個(gè)Intent對(duì)象,其構(gòu)造方法如下。
Intent intent = new Intent(當(dāng)前Activity.this, 另一Activity.class);
。2)調(diào)用Activity的startActivity(intent)方法,切換到另一個(gè)Activity頁(yè)面。
【例3-1】 從一個(gè)Activity頁(yè)面啟動(dòng)另一個(gè)Activity頁(yè)面示例。
創(chuàng)建名稱(chēng)為ex3_1的新項(xiàng)目,包名為com.ex3_1。在本項(xiàng)目中要建立兩個(gè)頁(yè)面文件及兩個(gè)控制文件,第1個(gè)頁(yè)面的界面布局文件為activity_main.xml、控制文件為MainActivity.java,第2個(gè)頁(yè)面的界面布局文件為second.xml、控制文件為secondActivity.java,還要修改配置文件AndroidManifest.xml。
。1)設(shè)計(jì)第1個(gè)頁(yè)面。
① 修改第1個(gè)頁(yè)面的控制文件MainActivity.java,源代碼如下:
1 package com.ex3_1;
2 import android.app.Activity;
3 import android.content.Intent;
4 import android.os.Bundle;
5 import android.view.View;
6 import android.view.View.OnClickListener;
7 import android.widget.Button;
8 public class MainActivity extends Activity
9 {
10 private Button btn;
11 @Override
12 public void onCreate(Bundle savedInstanceState)
13 {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.activity_main);
16 btn = (Button)findViewById(R.id.mButton);
17 btn.setOnClickListener(new btnclock());
18 }
19 class btnclock implements OnClickListener
20 {
21 public void onClick(View v)
22 {
23 Intent intent = new Intent(MainActivity.this, secondActivity.class);
24 //創(chuàng)建好Intent之后就可以通過(guò)它啟動(dòng)新的Activity
25 startActivity(intent);
26 }
27 }
28 }
② 第1個(gè)頁(yè)面的布局文件activity_main.xml如下:
1
2 3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6 7 android:id="@+id/textView1"
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello" />
11 12 android:id="@+id/mButton"
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:text="@string/button"
16 />
17
。2)設(shè)計(jì)第2個(gè)頁(yè)面。
① 在項(xiàng)目中新建第2個(gè)頁(yè)面的控制文件secondActivity.java。右擊資源管理器中的com.example.ex3_1選項(xiàng),在彈出的快捷菜單中選擇New(新建)→File(文件)命令,如圖3.1所示。
……