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