SlideShare a Scribd company logo
1 of 137
作者:神秘的 N 联系 QQ 369428455 1
14 天學會安卓開發
2
14 天學會安卓開發........................................................................................................... 1
前言.......................................................................................................................... 7
第一天 Android 架構與環境搭建....................................................................................... 7
1.1 android 基礎......................................................................................................... 7
1.1.1 Android 是什麼?.......................................................................................... 7
1.1.2 Android 的特點!.......................................................................................... 8
1.1.3 Android 優缺點!.......................................................................................... 8
1.1.4 Android 架構............................................................................................... 9
1.2 搭建 android 環境............................................................................................... 13
1.2.1 安裝 Java JDK 並配置 java 環境變數........................................................ 13
1.2.2 下載 eclipse 安裝 ADT 外掛程式.............................................................. 15
1.2.3 安裝 android sdk 並更新版本 ................................................................... 18
1.2.4 配置 android 環境變數 ............................................................................. 21
1.2.5 配置 ADV 安卓虛擬機器 並寫 hello android 測試.................................... 22
1.2.6 特別贈送:直接下載 Android Developer Tools 即可省略以上 5 個步驟.......... 25
第二天 Android 程式設計基礎........................................................................................ 33
2.1 深入瞭解安卓.................................................................................................... 33
2.1.1 工程結構解析.......................................................................................... 34
2.1.2 Android 中 JAVA包功能描述..................................................................... 34
2.1.3 Android 程式核心元件 .............................................................................. 35
2.2 瞭解 Activity ..................................................................................................... 35
2.2.1 Activity 的概念 ......................................................................................... 35
2.2.2 Activity 的生命週期 .................................................................................. 35
2.3 瞭解 Intent......................................................................................................... 37
2.3.1 什麼是意圖............................................................................................. 37
2.4 Bundle 類的作用 ................................................................................................ 39
2.5 回顧 helloandroid 看看安卓程式是怎麼運作的 ................................................... 39
2.6 寫第二個程式 ActivityLifeCycle ......................................................................... 41
2.7 使用篩檢程式.................................................................................................... 45
第三天.UI 事件處理與佈局管理...................................................................................... 51
3.1 View 與 ViewGroup ............................................................................................ 51
3.1.1 Android 介面元素 ..................................................................................... 51
3.1.2 認識 View................................................................................................ 51
3.1.3 認識 ViewGroup....................................................................................... 51
3.1.4 View 與 ViewGroup 的關係....................................................................... 51
3.2 事件處理機制.................................................................................................... 52
3.2.1Toast 控制項............................................................................................. 52
3.2.2 事件處理 Demo........................................................................................ 53
3.3 布介面佈局方式................................................................................................ 55
3.3.1 LinearLayout(線性佈局)........................................................................ 55
3.3.2 AbsoluteLayout(絕對佈局)..................................................................... 56
3.3.3 RelativeLayout(相對佈局) ..................................................................... 56
3.3.4 TableLayout(表格佈局)......................................................................... 57
3.3.5 FrameLayout(框架佈局)........................................................................ 59
3.3.6 佈局之間的關係...................................................................................... 59
3.4 樣式和主題(style&theme)................................................................................... 60
3
第四天.基礎 UI 控制項 ................................................................................................... 61
4.1 基本控制項介紹................................................................................................ 61
4.2 認識 Widget 元件 .............................................................................................. 66
4.3 Widget 組件類繼承關係...................................................................................... 67
第五天.高級 UI 控制項 ................................................................................................... 67
第六天.Android Service ................................................................................................... 73
6.1 Service 概述....................................................................................................... 73
6.1.1 Service 概念及用途................................................................................... 73
6.2 Service 生命週期................................................................................................ 73
6.3 啟動與停止 Service............................................................................................ 74
6.3.1 Service 開發步驟 ...................................................................................... 74
6.3.2 採用 startService()啟動服務...................................................................... 75
6.3.3 採用 bindService()啟動服務...................................................................... 75
6.3.4 Service 服務演示 ...................................................................................... 76
6.4 Notification 通知................................................................................................. 80
6.4.1 Android 中的通知(Notification) .................................................................. 80
6.5 案例分析........................................................................................................... 80
第七天.SharedPreferences 與文件..................................................................................... 81
7.1 SharedPreferences ............................................................................................... 81
7.1.1 資料存儲方式........................................................................................... 81
7.1.2 SharedPreferences...................................................................................... 81
7.1.3 SharedPreferences 存儲資料....................................................................... 82
7.1.4 訪問 SharedPreferences 資料...................................................................... 83
7.2 不同應用共用資料............................................................................................. 83
7.2.1 訪問其他應用 SharedPreferences 資料....................................................... 83
7.3 Android 檔操作................................................................................................... 84
7.3.1 檔存儲.................................................................................................... 84
7.3.2 讀檔操作.................................................................................................. 84
7.3.3 寫檔操作................................................................................................. 84
7.3.4 讀取靜態檔.............................................................................................. 84
7.3.5 使用檔進行資料存儲................................................................................ 85
7.3.6 讀取檔內容............................................................................................. 85
7.4 SDCard 文件存取............................................................................................... 86
7.4.1 把文件存放在 SDCard.............................................................................. 86
第八天.SQLite 資料庫技術.............................................................................................. 89
8.1 SQLite 介紹 ....................................................................................................... 89
8.1.1 資料庫存儲.............................................................................................. 89
8.1.2 SQLite 介紹.............................................................................................. 89
8.2 創建/打開/刪除資料庫....................................................................................... 89
8.2.1 創建資料庫............................................................................................. 89
8.2.2 其他創建資料庫的方法............................................................................ 90
8.2.3 刪除資料庫............................................................................................. 90
8.2.4 打開資料庫............................................................................................. 91
8.2.5 非查詢 SQL 指令.................................................................................... 91
8.3 創建/刪除表...................................................................................................... 91
8.3.1 SQLite 基礎案例....................................................................................... 91
4
8.3.2 SQLite 基礎案例:更新視圖顯示 .............................................................. 92
8.4 CRUD 操作........................................................................................................ 93
5.5 交易處理........................................................................................................... 93
5.5.1 使用事務操作 SQLite 資料庫.................................................................... 93
第九天.ContentProvider 與 BroadcastReceiver ................................................................... 94
9.1 ContentProvider .................................................................................................. 94
9.1.1 使用 ContentProvider 共用資料................................................................. 94
9.1.2 Uri 介紹 ................................................................................................... 95
9.1.3 UriMatcher 類使用介紹............................................................................. 96
9.1.4 使用 ContentProvider 共用資料................................................................. 97
9.2 ContentResolver .................................................................................................. 97
9.2.1 ContentResolver ........................................................................................ 97
9.2.2 讀取電話本............................................................................................. 98
9.3 BroadcastReceiver ............................................................................................... 99
9.3.1 Broadcast Intent Receiver............................................................................ 99
9.3.2 廣播接收者--BroadcastReceiver................................................................. 99
9.3.4 廣播接收者............................................................................................100
9.3.5 鬧鐘與提醒服務 Demo............................................................................101
第十天.Android 網路與通信 ...........................................................................................101
10.1 Android 網路通訊介紹...................................................................................101
10.1.1 網路通訊技術.......................................................................................101
10.2 Java.net.........................................................................................................102
10.2.2 主 Activity .............................................................................................102
10.2.3 直接獲取資料.......................................................................................103
10.2.4 以 Get 方式上傳參數.............................................................................104
10.2.5 以 Post 方式上傳參數............................................................................104
10.3 Apache HttpClient ..........................................................................................106
10.3.1 使用 HttpClient:主 Activity.....................................................................106
10.3.2 HttpClient:HttpGet ..................................................................................107
10.3.3 HttpClient:HttpPost .................................................................................108
10.4 裝載並顯示 Web 網頁....................................................................................109
10.4.1 用執行緒刷新網頁顯示.........................................................................109
10.4.2 裝載網頁並顯示....................................................................................110
10.5 Socket 程式設計複習.....................................................................................111
第十一天.Android 圖形技術 ...........................................................................................111
11.1 Paint 類與 Canvas 類 ........................................................................................111
11.1.1 繪圖 Paint 類.........................................................................................111
11.1.2 在執行緒中更新介面.............................................................................112
11.1.3 Canvas 畫布類.......................................................................................112
11.2 SurfaceView 類................................................................................................113
11.2.1 SurfaceView 類.......................................................................................113
11.2.2 SurfaceView 使用要點............................................................................113
11.2.3 SurfaceView 回檔方法............................................................................114
11.2.3 繪圖執行緒...........................................................................................114
11.2.4 繪圖方法..............................................................................................114
11.3 繪製幾何形狀.................................................................................................115
5
11.3.1 繪製幾何形狀.......................................................................................115
11.3.2 ShapeDrawable 繪製幾何圖形.................................................................116
11.4 圖形繪製與旋轉縮放......................................................................................117
11.4.1 繪製圖像 1............................................................................................117
11.4.2 繪製圖像 2............................................................................................117
11.4.3 繪製圖像 3............................................................................................118
11.4.5 圖像旋轉..............................................................................................118
11.4.6 圖像縮放..............................................................................................119
11.5 用 Shader 類進行渲染.....................................................................................119
第十二天.Android 動畫技術 ...........................................................................................120
12.1 Tween 動畫......................................................................................................120
12.1.1 動畫實現..............................................................................................120
12.1.2 代碼實現 Tween 動畫 1..........................................................................120
12.1.3 代碼實現 Tween 動畫 2..........................................................................120
12.2.4 代碼實現 Tween 動畫:main.xml..............................................................121
12.2.5 XML 佈局實現 Tween 動畫....................................................................121
12.2 Frame 幀動畫..................................................................................................123
12.2.1 代碼實現 Frame 動畫............................................................................123
12.2.2 XML 實現 Frame 動畫............................................................................124
12.3 GIF 動畫.........................................................................................................125
12.4 全屏與橫屏技術.............................................................................................125
12.5 獲取螢幕屬性.................................................................................................125
第十三天.Android 多媒體開發........................................................................................126
13.1 播放音樂........................................................................................................126
13.1.1 多媒體架構...........................................................................................126
13.1.2 Open Core 框架......................................................................................127
13.1.3 調用層次關係.......................................................................................127
13.1.4 音樂播放..............................................................................................127
13.2 播放視頻........................................................................................................128
13.2.1 播放視頻.....................................................................................................128
13.2.2 音樂/視頻播放案例...............................................................................128
13.3 錄製音訊........................................................................................................129
13.3.1 實現錄音功能.......................................................................................129
13.3.2 音視頻採集...........................................................................................129
13.4 拍攝照片........................................................................................................130
13.4.1 錄音/拍照案例......................................................................................130
13.5 鈴聲設置........................................................................................................130
13.5.1 鈴聲設置:設置各種鈴聲......................................................................130
13.5.2 鈴聲設置:回呼函數.............................................................................130
13.5.3 鈴聲設置:main.xml .............................................................................131
13.5.4 鈴聲設置:AndroidManifest.xml ............................................................132
14. Android 項目案例: mp3 播放機 .................................................................................132
14.1 需求列表.........................................................................................................132
14.1.1 需求解析:1.創建 Web 應用..................................................................133
14.1.2 需求解析:2.編寫 XML 檔....................................................................133
14.1.3 需求解析:3.網路下載 XML .................................................................133
6
14.1.4 需求解析:4.解析 XML 文件示.............................................................133
14.1.5 需求解析:5.下載 mp3..........................................................................134
14.1.6 需求解析:6.多執行緒下載 mp3............................................................134
14.1.7 需求解析:7.顯示 mp3 下載進度...........................................................134
14.1.8 需求解析:8.線上播放 mp3...................................................................134
14.1.9 需求解析:9.後臺播放 mp3...................................................................135
14.1.10 需求解析:10.植入廣告.......................................................................135
14.1.11 需求解析:11.關於對話方塊................................................................135
14.1.12 需求解析:12.用主題控制字體與顏色 .................................................135
7
前言:
本人也是菜鳥,老鳥看了此文有哪裡不好之處敬請指點,本書是根據<<Android 應用開
發揭秘>>攢寫的,如何把一本書讀薄,是一件值得思考的問題.本書針對有 JAVA 基礎的孩紙們, 基
本 JAVA 基礎都沒的,趕緊去找 21 天學會 JAVA 回去從頭開始學,或者找一本從零開始學
android 開發看也行.廢話不多說,本人也是剛開始寫,有哪裡我寫不清楚的請多多指點,原型是
寫出來了,後續慢慢更新,先把第一二天上傳上來,看看大家有什麼反應.
第一天 Android 架構與環境搭建
1.1 android 基礎
1.1.1 Android 是什麼?
 是一個針對移動設備的作業系統和軟體平臺
 基於 Linux內核
 由 Google 和開放手機聯盟 OHA 開發的
 容許使用 Java語言來開發和管理代碼
 Android 開放原始程式碼,Android 遵從 Apache Software License (ASL)2.0
版本 的協定
 Android 於 2007 年 11月 5 日開放手機聯盟成立時發佈
注:開放手機聯盟 (OHA)
8
1.1.2 Android 的特點!
 應用框架可以重複使用,其元件也可以更換。
 Dalvik 虛擬機器針對移動設備進行了優化。
 優化的圖形能力支援 2D、3D 圖形(OpenGL ES 1.0)。
 集成了基於開源 WebKit 引掣的流覽器。
 SQLite 作為結構化資料存儲。
 多媒體支援多種音訊、視頻格式。
 GSM Telephony (hardware dependent)
 支持藍牙 Bluetooth,3G 和 WiFi
 支援照相機、GPS、指南針和加速度儀等感測器硬體。
 豐富的開發環境。包括類比機、調試工具、記憶體運行檢測,以及為 Eclipse IDE
所 寫的外掛程式。
1.1.3 Android 優缺點!
優點
 原始程式碼完全開放。
 採用了對有限記憶體、電池和 CPU 優化過的虛擬機器Dalvik,Android 的運行速度比想 象的要
快很多。
 運營商(中國移動等)的大力支持,產業鏈條的熱捧。
9
良 好的盈利模式( 3/7 開),產業鏈條的各方:運營商、製造商、獨立軟體生產商都 可
以獲得不錯的利益。將移動終端的評價標準從硬體向軟體轉變,極大的激發了軟 件開
發者的熱情。
 Android 的原始程式碼遵循 Apache V2 軟體許可,而不是通常的GPL v2 許可。有
利於 商業開發。
 具有強大的 Linux 社區的支援。
缺點
 Google 提供了一套 Java 核心包(J2SE5,J2SE 6)的有限子集,尚不承諾遵守 Java
任何 Java 規範,可能會造成 Java陣營的進一步分裂。
 現有應用完善度不太夠,需要的開發工作量較大。
 模擬器調試手段不十分豐富,速度慢。
1.1.4 Android 架構
Linux Kernel& Android 內核
应用层
应用框架层
(开发调用)
运行机制
(DVM-JVM)
类库层
底层
(基于 linux 内核)
10
 Android 基於 Linux 內核,但不是Linux
 內核提供系統核心服務,如進程、記憶體、電源管理,網路連接,驅動與安全等。
 並不包括全部的Linux。
 Linux 內核位於硬體和軟體堆之間的抽象層
 核心服務:安全機制、記憶體管理、進程管理、網路、硬體驅動。
 內核扮演的是硬體層和系統其它層次之間的一個抽象層的概念。
 作業系統的初始化和程式設計介面和標準的 Linux 系統是有所不同的。
Libraries
 C/C++庫:被各種 Android 元件使用通過應用程式框架開發者可以使用其功能包
括:
 媒體庫:MPEG4 H.264 MP3 JPG PNG .....
 WebKit/LibWebCore:Web 流覽引擎
 SQLite 關聯式資料庫引擎
 2D,3D 圖形庫、引擎
Function Libraries
 WebKit
 基於開源 WebKit 的流覽器
 支持 CSS、Javascript、DOM、Ajax
 多媒體框架
 基於 PacketVideo OpenCORE平臺
 支援標準音頻、視頻
 SQLite
 輕型資料庫,支援多種平臺
11
Native Servers-Surface
 為多種應用提供 2D、3D表面設計
Native Servers-Audio
 音訊處理
Hardware Abstraction Libs
 硬體虛擬層
 User space C/C++ library layer
 硬體介面驅動
 使 Android 平臺邏輯與硬體介面分離
DVM vs JVM
 DVM
 Google
 Dalvik excutable
JVM
 Sun
 Java bytecode
Applications Framework
 Activity manager
 管理運行應用程式
12
 Content Provider
 在各應用之間共用資料
 Resource Manager
 管理非代碼資源
 Notification Manager
 顯示使用者提示和狀態列
 Views System
 可擴展顯示,可構建 UI
應用和框架
 核心應用,例如連絡人,電子郵件,電話,流覽器,日曆,地圖, ...
 充分訪問所有核心應用框架 API
 簡化組件的重用
 用 Java 編寫應用程式
Applications
 JAVA 編寫的應用程式
13
1.2 搭建 android 環境
注:如果想從頭開始學怎麼搭建 android 開發環境的請從 1.2.1 開始 如果想直接學開
發了,請跳過此步驟,到1.2.6 節直接下載穀歌提供的開發工具進行開發.
1.2.1 安裝 Java JDK 並配置 java 環境變數.
下載 JDK,(官方推薦使用 1.6 版本)
http://www.oracle.com/technetwork/java/javase/downloads/index.html(官網下載地址)
http://download.oracle.com/otn-pub/java/jdk/6u37-b06/jdk-6u37-windows-i586.exe
(x86 直接下載地址)
http://download.oracle.com/otn-pub/java/jdk/6u37-b06/jdk-6u37-windows-x64.exe
(x64 直接下載地址)
安裝 JDK 略過
打開環境變數視窗方法:右鍵【我的電腦】--按一下【屬性】--按一下【高級】--按一下【環境變數】。 在上
方的使用者變數中依次新建如下變數,並分別填入如下路徑:
變數名:JAVA_HOME
變數值:C:Javajdk1.6.0_22(此路徑為 JAVA 安裝路徑)
變數名:PATH
14
變數值:%JAVA_HOME%/bin
變數名:CLASSPATH
變數值:.;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar
測試環境變數配置是否成功
【開始】--【運行】--輸入【cmd】--輸入【javac】--按【回車鍵】若看到以下資訊,則
代表配置成功。
15
1.2.2 下載 eclipse 安裝 ADT 外掛程式
Eclipse 下載地址:http://www.eclipse.org/downloads/(java 和 J2EE 都行)
http://build.eclipse.org/technology/phoenix/torrents/juno/eclipse-jee-juno-SR1-win32.zip.torrent
(x86 種子地址,如果下載不了請到官方下載)
http://build.eclipse.org/technology/phoenix/torrents/juno/eclipse-jee-juno-SR1-win32.zip.torrent X64
的
安裝 ADT
注意:
安裝 ADT 的方法有兩種
一 線上安裝(輸入 Name 和 Location 即可線上安裝,不推薦使用,因為在
線更新灰常慢)
Name:Andriod Plugin
Location:https://dl-ssl.google.com/android/eclipse/
16
執意想要線上更新的朋友,我們只需要配置一下 hosts 檔(翻牆不用我說吧?)
Hosts 檔只需要在 C 盤搜索一下就出來了
17
在文件的末尾添加下面一句:74.125.237.1 dl-ssl.google.com
(記得右鍵吧 hosts 文件唯讀的勾去了)
二 離線安裝(離線安裝要斷網,不然它會自動聯網安裝的)
離線版 ADT 下載 http://developer.android.com/sdk/index.html
18
離線更新有兩種方法
1 點 local..選擇解壓出來的 ADT 資料夾(好處是解包已在外部完
成了,可以直接更新,不用等待,推薦使用)
2.點 archive 選擇打包的 ADT(好處是不用在外部解包,但是不可
直接更新,要等 eclipse 解包完 ADT.ZIP 才能進行安裝,不推薦使用)
如果推薦使用的方法不行,哪就用其他方法吧!
1.2.3 安裝 android sdk 並更新版本
安裝完 ADT 之後它會提示你重啟 eclipse,重啟完後會提示選擇線上更新 SDK
還是選現有的 SDK(這裡只說明選現有的 SDK)
注意:記得選第二個,默認的是讓你選路徑下載 SDK 的
下載 SDK: http://developer.android.com/sdk/index.html
離線安裝 Sdk
19
找到 SDK 路徑應用一下就可以了
管理自己的 SDK,升級或者更新
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 20
版权归作者所有,禁止任何商业用途,违者必究.
在自己需要的版本上打勾然後按 install (一般開發都用 2.1,穀歌會提示你 95%的開發者都
在用 2.1 之類的話的)
點擊 install 後如下圖,選擇所有 再點 install
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 21
版权归作者所有,禁止任何商业用途,违者必究.
更新完後就大功告成了
1.2.4 配置 android 環境變數.
在上方的使用者變數中找到之前創建的【PATH】變數,按兩下它,然後在【變數值】 的最後面添
加上內容
【;E:Androidandroid-sdk-windowstools;E:Androidandroid-sdk-windowsplatform-tools】 其中的分號不能
少,分號在這裡是起到分隔的作用。
配置完成之後,分別點擊【開始】--【運行】--輸入【cmd】--輸入【android -h】--
按【回車鍵】,若看到以下資訊,則代表配置成功。
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 22
版权归作者所有,禁止任何商业用途,违者必究.
1.2.5 配置 ADV 安卓虛擬機器 並寫 hello android 測試
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 23
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 24
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 25
版权归作者所有,禁止任何商业用途,违者必究.
1.2.6 特別贈送:直接下載 Android Developer Tools即可省略
以上 5 個步驟
直接下載 Android Developer Tools 即可使用 官方已
經推出集成 ADT 和最新 SDK(4.2 版本)的 eclipse 了 命名
為 Android Developer Tools
下載地址:http://dl.google.com/android/adt/adt-bundle-windows-x86.zip 或者聯繫作
者獲取
如需安裝其他版本 SDK 請看第 3 步
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 26
版权归作者所有,禁止任何商业用途,违者必究.
寫第一個 android 程式
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 27
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 28
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 29
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 30
版权归作者所有,禁止任何商业用途,违者必究.
第一個程式就創建好了,如下圖啟動你的程式
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 31
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 32
版权归作者所有,禁止任何商业用途,违者必究.
如圖,測試成功.第一天的android 課程結束.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 33
版权归作者所有,禁止任何商业用途,违者必究.
第二天 Android 程式設計基礎
2.1 深入瞭解安卓
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 34
版权归作者所有,禁止任何商业用途,违者必究.
2.1.1 工程結構解析
src: Java 原始程式碼目錄(只允許有一個包)
AndroidMainfest.xml (清單檔,描述應用程式構成、元件、許可權等配置資訊)
gen/R.java 資源檔,修改後自動重新生成
Android 庫
assets: 靜態資產檔(用於存放不編譯的資源最大支持 1G)
drawable:程式圖示(ico.png)
layout: 佈局資料夾
values:程式用到的 string、顏色(string.xml)
classes.dex 編譯的 java 二進位碼 Android 平臺上的可執行檔
ActivityLifeCycle.apk Android 安裝包(APK 包)
resources.ap_ 資源資訊檔
2.1.2 Android 中 JAVA包功能描述
 android.app :提供高層程式模型、提供基本的運行環境
 android.content :對設備上的資料進行訪問和發佈的類
 android.database :通過內容提供者流覽和操作資料庫
 android.graphics :底層的圖形庫
 android.location :定位和相關服務的類
 android.media :管理多種音訊、視頻的媒體介面
 android.net :提供説明網路訪問的類
 android.os :提供了系統服務、消息傳輸、 IPC機制
 android.opengl :提供 OpenGL 的工具
 android.provider :提供類訪問 Android 內容提供者
 android.telephony :提供與撥打電話相關的 API 交互
 android.view :提供基礎的使用者介面介面框架
 android.util :涉及工具性的方法,例如時間日期的操作
 android.webkit :預設流覽器操作介面
 android.widget :包含各種 UI 元素在應用程式的螢幕中使用
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 35
版权归作者所有,禁止任何商业用途,违者必究.
2.1.3 Android 程式核心元件
View: 介面視圖、組織 UI 控制項
Intent: 意圖,支援組件間通信
Activity: 處理介面與 UI 互動
Content Provider: 存儲共用資料
IntentReceiver: 接收資訊及事件處理
Service: 後臺服務(如硬體與驅動的服務)
Notification: 消息與通知
2.2 瞭解 Activity
2.2.1 Activity 的概念
 活動是最基本的 Android應用程式元件
 一個活動通常就是一個單獨的螢幕,它將會顯示由視圖控制群組成的使用者介面,並
對事 件做出回應以啟動其他組件。
 當一個新的螢幕打開後,前一個螢幕將會暫停,並保存在歷史堆疊中。使用者可以
返 回到歷史堆疊中的前一個螢幕。當螢幕不再使用時,還可以從歷史堆疊中刪
除。 Android 將會保留從主螢幕到每一個應用的運行螢幕。
 所有應用的 Activity 都繼承於 android.app.Activity 類
2.2.2 Activity 的生命週期
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 36
版权归作者所有,禁止任何商业用途,违者必究.
Activity 有三個狀態:
 當 它在螢幕前臺時(位於當前任務堆疊的頂部),它是啟動或運行狀態。它就是響 應
用戶操作的Activity。
 當 它失去焦點但仍然對用戶可見時(如右圖),它處於暫停狀態。即在它之上有另 外
一個 Activity。這個 Activity 也許是透明的,或者沒有完全覆蓋全屏,所以被暫
停的 Activity 仍對用戶可見。暫停的 Activity 仍然是存活狀態(它保留著所有的
狀 態和成 員資訊 並保持和 視窗管理 器的連接 ),但系統處於極低記憶體時仍然可
以 殺 死 這個 Activity。
 完全被另一個 Activity 覆蓋時則處於停止狀態。它仍然保留所有的狀態和成員信
息。然而對使用者是不可見的,所以它的視窗將被隱藏,如果其它地方需要記憶體,
則 系統經常會殺死這個Activity。
當 Activity 從一種狀態轉變到另一種狀態時,會調用以下保護方法來通知這種變化:
這 七 個 方法定義了 Activity 的 完 整生命週期。實現這些方法可以説明我們監視其中的三個嵌 套生命週期
迴圈:
 Activity 的 完 整 生命 週期自 第一 次調用 onCreate()開 始,直至調用 onDestroy()為止。
Activity 在 onCreate()中設置所有“全域”狀態以完成初始化,而在onDestroy()中
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 37
版权归作者所有,禁止任何商业用途,违者必究.
釋放所有系統資源。例如,如果 Activity 有一個執行緒在後臺運行從網路上下載資料,
它會在 onCreate()創建執行緒,而在 onDestroy()銷毀執行緒。
 Activity 的可視生命週期自 onStart()調用開始直到相應的 onStop()調用結束。在此
期間,使用者可以在螢幕上看到 Activity,儘管它也許並不是位於前臺或者也不與
用 戶進行交互。在這兩個方法之間,我們可以保留用來向使用者顯示這個
Activity 所需 的資源。例如,當使用者不再看見我們顯示的內容時,我們可以在
onStart()中註冊一 個 BroadcastReceiver 來 監 控會影響 UI 的變化,而在 onStop()中 來
注消。 onStart() 和 onStop() 方法可以隨著應用程式是否為使用者可見而被多次調用。
 Activity 的前臺生命週期自 onResume()調用起,至相應的 onPause()調用為止。在 此
期間,Activity 位於前臺最上面並與用戶進行交互。Activity 會經常在暫停和恢復 之
間進行狀態轉換——例如當設備轉入休眠狀態或者有新的 Activity 啟動時,將調 用
onPause() 方法。當 Activity 獲得結果或者接收到新的 Intent 時 會調用 onResume() 方
法。關於前臺生命週期迴圈的例子請見 PPT下方備註欄。
(活動通俗來說就活動的可操縱的視窗)
2.3 瞭解 Intent
2.3.1 什麼是意圖:
1.Android 基本的設計理念是鼓勵減少組件間的耦合
2.Intent 提供通用的消息系統,它允許在元件與元件間傳遞 Intent 來執行動作和產生事件。
3.使用 Intent 可以啟動 Android應用的三個核心元件:活動、服務和廣播接收器。
4.Intent 可以劃分成顯式意圖和隱式意圖。
5.顯式意圖:調用 Intent.setComponent()或 Intent.setClass()方法指定了元件名或類物件的
Intent 為顯式意圖,顯式意圖明確指定了 Intent 應該傳遞給哪個組件。 6.隱式意圖:沒有調
用 Intent.setCo mponent()或 Intent.setClass()方 法指定元件名或類物件的 Intent 為隱式意圖。
Android 會根據 intent-filter 中設置的動作(action)、類別(category)、 資料(URI 和資料類
型)找到最合適的元件來處理這個意圖。Intent Filter(篩檢程式)其實 就是用來匹配隱式
Intent 的。想要接收使用 startActivity()方法傳遞的隱式意圖的活動必須 在它們的意圖篩檢
程式中包含"android.intent.category.DEFAULT"
(簡單舉個例子,我意圖打劫,所以意圖就是那麼一回事)
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 38
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 39
版权归作者所有,禁止任何商业用途,违者必究.
2.4 Bundle 類的作用
2.5 回顧 helloandroid 看看安卓程式是怎麼運作的
為什麼到了這裡我們才講 android 應用是怎麼運作的呢?到了這裡我們已經初步瞭解
activity,和 intent,和 Bundle 了!
首先我們知道java 是從Main 進入程式的,那麼android 是怎樣進入程式的呢?細心的朋友或許
已經知道了, AndroidManifest.xml,就是我們程式的入口了.在 2.1 節裡面,有這樣的一幅圖
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 40
版权归作者所有,禁止任何商业用途,违者必究.
包名是我們創建目錄的包名,包名下面是版本號,
<application>標籤裡註冊了圖示,標題名,還有 activity, @是標準格式,在 R 裡邊會有唯一的
一個 ID,比如 XML 是用來佈局的,那麼在 R 裡則會生成一個對應的 ID,
<intent-filter>標籤監聽器,監聽 activity 第一個打開
那麼我們就可以去看看 MainActivity 了
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 41
版权归作者所有,禁止任何商业用途,违者必究.
首先我們看看是不是有 activity 的 onCreate 啊!上面說,不論如何都要先執行它,然後傳進來一
個 Bundle 類型的值,然後又調用自身這個類!底層代碼已經幫我們實現好了,我們只需要用就
行了.然後 setContentView 是得到內容視圖,得到那個視圖呢?剛剛我們不是說了嗎,註冊一個
XML 就會有一個 R 值.獲取到 activity_main 這個視圖
那麼我們來看看佈局檔 xml 裡是什麼,
裡面就一個文字方塊,字串是找strings 裡邊的一個字串
所以我們創建 helloandroid 的時候,看到的就是 hello world 了! 在此
我們瞭解完了 android 的運作過程,那麼我們來寫第二個程式吧!
2.6 寫第二個程式 ActivityLifeCycle
按照創建 helloandroid 程式的方法創建一個 activityLifeCycle 的項目 然後點擊包右鍵新建一
個類
為應用添加新的 Activity
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 42
版权归作者所有,禁止任何商业用途,违者必究.
這裡說明一下 onCreate 是怎麼弄出來的!
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 43
版权归作者所有,禁止任何商业用途,违者必究.
在前面打勾按下 OK
打開新的 Activity,不傳遞參數
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 44
版权归作者所有,禁止任何商业用途,违者必究.
上面定義了一個按鈕,findViewById 是根據 ID 找到視圖,R.id.button 那麼你的 XML 是不
是要添加一個按鈕啊?在最新版的 ADT21 中,我們可以輕鬆的佈局了,在 ADT8 中拖動控制項
還 是很麻煩的
學過java 的都會問,為什麼不直接NEW 一個按鈕啊,那麼麻煩,android 這樣是為了降低耦
合度,高內聚,低耦合.
當讓你也可以再 xml 裡自己寫控制項
我們再回過頭來看 button. setOnClickListener(new OnClickListener(){ })
這裡的 setOnClickListener 是放置一個點擊監聽器裡邊有 new 了一個內部類 為什麼要
這樣寫?當讓你也可以不這樣寫,這樣寫是為了方便,學過 java 的應該都知道吧!
你另外寫一個類,然後再調用它也可以.
實現 OnClickListener 介面自動實現 onClick 方法
這句可以分開來寫
Intent intent=new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 45
版权归作者所有,禁止任何商业用途,违者必究.
startActivity(intent);
剛剛我們學了意圖,意圖是活動之間傳遞資訊的信使,第一個參數是自身的一個活動,
第二個是要轉過去的活動.
2.7 使用篩檢程式:
如何弄出 LoCat
快捷欄裡沒有的話到 Other 裡邊找
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 46
版权归作者所有,禁止任何商业用途,违者必究.
相信學過 java 的對輸出語句並不陌生,點擊上面綠色的那個加號就是添加篩檢程式
的,by log level 是日誌類型,如上圖右邊的箭頭,從上到下有所有日誌,捉蟲日誌,資訊日誌,警告
日誌, 錯誤日誌…
設置 syso 篩檢程式
Syso 的記錄日誌我覺得沒那麼亂,容易看出來,單獨顯示出來的,all 是所有資訊
(詳情請參考demo, ActivityLifeCycle)
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 47
版权归作者所有,禁止任何商业用途,违者必究.
打開新的 Activity,傳遞參數給它
得到新 Activity 關閉後返回的資料
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 48
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 49
版权归作者所有,禁止任何商业用途,违者必究.
請求碼的作用
結果碼的作用
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 50
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 51
版权归作者所有,禁止任何商业用途,违者必究.
第三天.UI 事件處理與佈局管理
3.1 View 與 ViewGroup
3.1.1 Android 介面元素
 1、View: 視圖組件
 2、Layout: 佈局組件
 3、Wigets: UI 元素
 4、Menus: 菜單
3.1.2 認識 View
1、所有高級 UI 組件都繼承 View 類而實現的
2、一個 View 在螢幕上佔據一塊矩形區域
3、負責渲染
4、負責處理發生的事件
5、設置是否可見
6、設置是否可以獲得焦點等
3.1.3 認識 ViewGroup
1、ViewGroup 對象是 android.view.ViewGroup 實例
2、 ViewGroup 是View 的容器
3、 負責對添加進 ViewGroup 的 View 進行佈局
4、一個 ViewGroup 可以加入到另一個 ViewGroup
3.1.4 View 與 ViewGroup 的關係
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 52
版权归作者所有,禁止任何商业用途,违者必究.
3.2 事件處理機制
控制項事件通過設置其控制項的監聽器來監聽並處理
事件 按鍵按下事件:通過重寫 onKeyDown 方法 按
鍵彈起事件:通過重寫 onKeyUp 方法 觸筆點擊事
件:通過實現 onTouchEvent 方法 其他事件參考相
應 UI 元件的 Demo!!
3.2.1 Toast控制項
在視圖中給使用者顯示的短小的提示消息。
Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
LENGTH_LONG:長時間顯示
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 53
版权归作者所有,禁止任何商业用途,违者必究.
LENGTH_SHORT:短時間顯示
3.2.2 事件處理 Demo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 54
版权归作者所有,禁止任何商业用途,违者必究.
詳情請參考 DEMO
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 55
版权归作者所有,禁止任何商业用途,违者必究.
3.3 布介面佈局方式
LinearLayout(線性佈局)
AbsoluteLayout(絕對佈局)
RelativeLayout(相對佈局)
TableLayout(表格佈局)
FrameLayout(框架佈局)
3.3.1 LinearLayout(線性佈局)
是常用的佈局之一 一個元件一行的形式顯示
出來 分垂直(vertical)與水準(horizontal)兩
種。 main.xml: vertical
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 56
版权归作者所有,禁止任何商业用途,违者必究.
main.xml: horizontal
3.3.2 AbsoluteLayout(絕對佈局)
絕對佈局根據設定好的座標進行定位顯示
AbsoluteLayout 兩個重要的屬性:
android:layout_x 元件在螢幕中的 X 座標
android:layout_y 元件在螢幕中的 Y 座標
3.3.3 RelativeLayout(相對佈局)
是按照相對某個元件的位置來進行佈局,也就是說參考某個元件,置於此元件的上、
下、左、右
其中幾個重要的屬性:
android:layout_below=“元件 ID”在某組件下麵
android:layout_above=“元件 ID”在某組件上面
android:layout_toRightOf=“ID” 在某組件右邊
android:layout_toLeftOf=“ID” 在某組件左邊
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 57
版权归作者所有,禁止任何商业用途,违者必究.
RelativeLayout Demo
3.3.4 TableLayout(表格佈局)
是比較常用的佈局,它是按照表格的方式來佈局整個畫面的
TableRow:TableLayout 中需要嵌入行,然後將元件置於 TableRow 中才能顯示成
Table 的形式
幾個重要的屬性:
android:layout_weight:比重
TableRow:行
TableLayout Demo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 58
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 59
版权归作者所有,禁止任何商业用途,违者必究.
3.3.5 FrameLayout(框架佈局)
是一個比較特殊的佈局 此佈局一般放一個元件,並且這
個元件是靠左上角顯示, 如果加入多個元件,那將會顯
示最上層的一個元件。
FrameLayout Demo
3.3.6 佈局之間的關係
LinearLayout、AbsoluteLayout、RelativeLayout、FrameLayout 均是ViewGroup 的子類
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 60
版权归作者所有,禁止任何商业用途,违者必究.
TableLayout 則是LinearLayout 子類,如果TableLayout 中的元件沒有放入TableRow 中的話, 那麼就會按
照 LinearLayout 顯示
在 Android 中,佈局是可以相互嵌套的,比如 LinearLayout 中能夠嵌入 TableLayout 一樣
3.4 樣式和主題(style&theme)
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 61
版权归作者所有,禁止任何商业用途,违者必究.
第四天.基礎 UI 控制項
4.1 基本控制項介紹
1、Button 按鈕
 研究 ButtonDemo
2、TextView 文字方塊
 研究 TextViewDemo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 62
版权归作者所有,禁止任何商业用途,违者必究.
3、EditText 文本編輯方塊
 研究 EditTextDemo
4、CheckBox 多項選擇 每個多選框都是獨立的,可以通過反覆運算所有多選框,然後根
據其狀態是否被選中再獲取其值。
 CheckBox.setChecked(true);//設置成選中狀態。
 CheckBox.getText();//獲取多選框的值
 調 用 setOnCheckedChangeListener() 方 法 , 處 理 多 選 框 被 選 擇 事 件 , 把
CompoundButton.OnCheckedChangeListener 實例作為參數傳入
 研究 CheckBoxDemo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 63
版权归作者所有,禁止任何商业用途,违者必究.
5、RadioButton 單項選擇
 研究 RadioButtonDemo
6、Spinner 下拉清單
 Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());獲取下拉式清單方塊的值
 調 用 setOnItemSelectedListener() 方 法 , 處 理 下 拉 列 表 框 被 選 擇 事 件 , 把
AdapterView.OnItemSelectedListener 實例作為參數傳入
下拉式清單方塊—Adapter
 很多時候顯示在下拉式清單方塊的值並不是希望得到的值,如果要做一個連絡人下
拉列 表框,清單方塊列出的是連絡人的姓名,因為姓名有可能相同,所以我們希
望得到的 值應該為該連絡人的 id,要實現這種需求我們需要自訂 Adapter,當
然自訂 Adapter 需要我們編寫一小段代碼,如果我們不想編寫 Adapter,又能實現
我們的需 求 , 那 是 最 好 不 過 的 了 。 通 過 觀 察 ArrayAdapter 中 getView(int
position, View convertView, ViewGroup parent)的內部代碼發現,如果為ArrayAdapter
指定的實際泛
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 64
版权归作者所有,禁止任何商业用途,违者必究.
型參數類型沒有實現 CharSequence(字串)介面,將會調用該類型物件的 toString()
向下拉式清單方塊輸出顯示值。利用這個特點我們可以重寫 javaBean 的toString()向
下拉 清單方塊提供顯示值。
下拉式清單方塊--自訂選項介面樣式
 Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());獲取下拉式清單方塊的值
 調 用 setOnItemSelectedListener() 方 法 , 處 理 下 拉 列 表 框 被 選 擇 事 件 , 把
AdapterView.OnItemSelectedListener 實例作為參數傳入
7、TimePicker/DatePicker 時間選擇器
 研究 TimeDatePicker
8、ScrollView 滾動視圖
 研究 ScrollViewDemo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 65
版权归作者所有,禁止任何商业用途,违者必究.
9、ImageView 圖片視圖
 研究 ImageViewDemo
10、ImageButton 圖片按鈕
 研究 ImageButtonDemo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 66
版权归作者所有,禁止任何商业用途,违者必究.
11、GridView 網格視圖
 研究 GridViewImageDemo
4.2 認識 Widget 元件
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 67
版权归作者所有,禁止任何商业用途,违者必究.
1、介面中展示的各個小元件
2、有獨立的事件處理能力
3、所有 Wiget 組件都是繼承 View 而來
4.3 Widget 組件類繼承關係
第五天.高級 UI 控制項
高級控制項介紹 12、
ProgressBar 進度條
創建進度條
在佈局 xml 檔中添加進度條代碼:
<ProgressBar android:layout_width="fill_parent"android:layout_height="20px"
style="?android:attr/progressBarStyleHorizontal"
android:id="@+id/downloadbar"/>
在代碼中操作進度條:
ProgressBar.setMax(100);//設置總長度為 100 ProgressBar.setProgress(0);//設置已經開啟長
度為 0,假設設置為50,進度條將進行到一半
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 68
版权归作者所有,禁止任何商业用途,违者必究.
 研究 ProgressBarDemo
13、ProgressDialog 進度條對話方
塊 打開對話方塊
newAlertDialog.Builder(this)
.setTitle(“lxt008")
.setMessage("流覽http://www.lxt008.com")
.setPositiveButton("打開連結",
newDialogInterface.OnClickListener(){
public void onClick(DialogInterface dialoginterface, int
i){ Uri uri = Uri.parse("http://www.lxt008.com/");
Intent intent =newIntent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}
).show();
 研究 DialogDemo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 69
版权归作者所有,禁止任何商业用途,违者必究.
帶進度條的對話方塊
 研究 ProgressDialogDemo
進度對話方塊ProgressDialog
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 70
版权归作者所有,禁止任何商业用途,违者必究.
 使用代碼 ProgressDialog.show(ProgressDialogActivity.this, "請稍等", "資料正在載入
中...", true);創建並顯示一個進度對話方塊。
 調用setProgressStyle()方法設置進度對話方塊風格。有兩種
風格: ProgressDialog.STYLE_SPINNER 旋體進度條風格 (為默
認風格) ProgressDialog.STYLE_HORIZONTAL 橫向進度條風格
14、SeekBar 拖動條
 SeekBar.getProgress()獲取拖動條當前值
 調 用 setOnSeekBarChangeListener() 方 法 處 理 拖 動 條 值 變 化 事 件 , 把
SeekBar.OnSeekBarChangeListener 實 例作為參數傳入
 研究 SeekBarDemo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 71
版权归作者所有,禁止任何商业用途,违者必究.
15、ImageSwitcher 圖片切換
 研究 ImageSwitcherDemo
16、Gallery 圖片切換
 研究 GalleryDemo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 72
版权归作者所有,禁止任何商业用途,违者必究.
17、TabHost 標籤組件
 研究 TabHostDemo
18、Menu 菜單
 重寫Activity的onCreateOptionsMenu(Menu menu)方法,該方法用於創建選項功能表,
在 用 戶 按 下 手 機 的 “ Menu” 按 鈕 時 就 會 顯 示 創 建 好 的 菜 單 , 在
onCreateOptionsMenu(Menu menu)方法內部可以調用 Menu.add()方法實現功能表的
添 加。
 重寫 Activity 的 onMenuItemSelected()方法,該方法用於處理功能表被選擇事件
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 73
版权归作者所有,禁止任何商业用途,违者必究.
第六天.Android Service
6.1 Service 概述
6.1.1 Service 概念及用途
 服務是運行在後臺的一段代碼。
 不是進程,也不是執行緒。
 可 以 運行在它自己的進程,也可以運行在其他應用程式進程的上下文(context) 裡 面 , 這取決於自身
的需要。
 Android 中 的 服務,它與 Activity 不 同 ,它是不能與用戶交互的,不能自己啟動的, 運行在後臺的
程式。
 媒體播放機的服務,當使用者退出媒體選擇使用者介面,仍然希望音樂依然可以繼續播 放,這
就是由服務(service)來保證當使用者介面關閉時音樂繼續播放的。
 比如當我們一個應用的資料是通過網路獲取的,不同時間的資料是不同的,這時候我
們可以用 Service 在後臺定時更新,而不用每打開應用的時候在去獲取。
6.2 Service 生命週期
 onCreate()
 在服務被創建時調用,該方法只會被調用一次,無論調用多少次 startService()
或 bindService()方法,服務也只被創建一次。
 onStart()
 只有採用 Context.startService()方法啟動服務時才會回檔該方法。該方法在服
務開始運行時被調用。多次調用 startService()方法儘管不會多次創建服務,
但 onStart() 方法會被多次調用。
 onDestroy()
 服務被終止時調用。
 onBind()
 只有採用 Context.bindService() 方法啟動服務時才會回檔該方法。該方法在調
用者與服 務綁 定時 被調用 ,當 調用 者與 服務 已經綁 定, 多次 調 用
Context.bindService()方法並不會導致該方法被多次調用。
 onUnbind()
 只有採用 Context.bindService() 方法啟動服務時才會回檔該方法。該方法在調
用者與服務解除綁定時被調用。
 startService 後,即使調用 startService 的進程結束了 Service仍然還存在,直到有
進 程 調 用 stopService, 或 者 Service 自 己自殺(stopSelf()) 。
 bindService 後,Service 就和調用 bindService 的進程同生共死了,也就是說當調用
bindService 的進程死了,那麼它 bind 的 Service 也要跟著被結束,當然期間也可以
調用 unbindservice 讓 Service 結束。
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 74
版权归作者所有,禁止任何商业用途,违者必究.
 兩種方式混合使用時,比如說你 startService 了,我 bindService 了,那麼只有你
stopService 了而且我也 unbindservice 了,這個Service 才會被結束。
6.3 啟動與停止 Service
6.3.1 Service 開發步驟
第一步:繼承 Service 類
public class MyService extends Service { }
第二步:在 AndroidManifest.xml 檔中的<application>節點裡對 服務進行配
置:
<service android:name=".MyService" /> 服務不能自己運行,使
用 startService()方法啟用服務,調用者與
服務之間沒有關連,即使調用者退出了,服務仍然運行。使用 bindService()
方法啟用服務,調用者與服務綁定在了一起,調用者 一旦退出,服務也就終
止,大有“不求同時生,必須同時死”的特點。
如果打算採用 Context.startService()方法啟動服務,在服務未被創建時,系
統會先調用服務的 onCreate()方法,接著調用 onStart()方法。如果調用
startService()方法前服務已經被創建,多次調用 startService()方法並不會
導致多次創建服務,但會導致多次調用 onStart()方法。採用 startService()方法
啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調
用 onDestroy()方法。
如果打算採用 Context.bindService()方 法 啟 動 服務,在服務未被創建時,系統
會先調用服務的 onCreate()方法,接著調用 onBind()方法。這個時候調用者和
服務綁定在一起,調用者退出了,系統就會先調用服務的 onUnbind()方法,接
著調用 onDestroy()方法。如果調用 bindService()方法前服務已經被綁定,多
次調用 bindService()方法並不會導致多次創建服務及綁定(也就是說
onCreate()和onBind()方法並不會被多次調用)。如果調用者希望與正在綁定的
服務解除綁定,可以調用unbindService()方法,調用該方法也會導致系統調用
服務的 onUnbind()-->onDestroy()方法。
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 75
版权归作者所有,禁止任何商业用途,违者必究.
6.3.2 採用 startService()啟動服務
6.3.3 採用 bindService()啟動服務
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 76
版权归作者所有,禁止任何商业用途,违者必究.
6.3.4 Service 服務演示
 1.新建一個 Android 工程 ServiceDemo
 2.修改 main.xml 代碼,增加二個按鈕
 3.新建一個 Service,命名為MyService.java
 4.新建 ServiceDemo.java
 5.配置 AndroidManifest.xml
 6.執行上述工程, 用 Logcat 查看日誌
 7.按 HOME 鍵進入 Settings(設置)Applications(應用)Running Services(正在運
行的服務)
main.xml
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 77
版权归作者所有,禁止任何商业用途,违者必究.
MyService.java
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 78
版权归作者所有,禁止任何商业用途,违者必究.
ServiceDemo.java
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 79
版权归作者所有,禁止任何商业用途,违者必究.
AndroidManifest.xml
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 80
版权归作者所有,禁止任何商业用途,违者必究.
6.4 Notification 通知
6.4.1 Android 中的通知(Notification)
6.5 案例分析
 參考案例:NotificationDemo
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 81
版权归作者所有,禁止任何商业用途,违者必究.
第七天.SharedPreferences 與文件
7.1 SharedPreferences
7.1.1 資料存儲方式
 SharedPreferences
 存儲到檔
 SQLite 資料庫
 存儲到網路
 內容提供者(Contentprovider)
7.1.2 SharedPreferences
 如何保存軟體配置參數:
 Window: 採用 ini 檔進行
 j2se 應用: 採用 properties 屬性檔
 Android 平臺提供一個 SharedPreferences類,它是一個羽量級的存儲類,
適合用於保存軟體配置參數。
 使用 SharedPreferences 保存資料,其背後是用 xml 檔存放資料,檔存 放在
/data/data/<package name>/shared_prefs 目錄下
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 82
版权归作者所有,禁止任何商业用途,违者必究.
7.1.3 SharedPreferences 存儲資料
 SharedPreferences sharedPreferences = getSharedPreferences("lxt008",
Context.MODE_PRIVATE);
Editor editor= sharedPreferences.edit();//獲取編輯器
editor.putString("name","lxt");
editor.putInt("age", 35);
editor.commit();//提交修改
生成的 lxt008.xml 檔內容如下:
<?xml version=“1.0” encoding=“utf-8” standalone=“yes”?>
<map>
<stringname="name">lxt</string>
<int name="age" value=“30"/>
</map>
 getSharedPreferences(name,mode)方法
 參數 1:指定該檔案名稱,名稱不用帶尾碼。
 參數 2:指定檔的操作模式,共有四種操作模式。
 Context.MODE_PRIVATE:為預設操作模式,代表該檔是私有數 據,
只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件 的
內 容 ,如果想把新寫入的內容追加到原文件中。可以使用
Context.MODE_APPEND
 Context.MODE_APPEND:模式會檢查檔是否存在,存在就往文 件
追加內容,否則就創建新檔。
 Context.MODE_WORLD_READABLE 和
Context.MODE_WORLD_WRITEABLE 用來控制其他應用是否有
許可權讀寫該文件。
 MODE_W ORL D_ RE ADABL E: 表示當前檔可以被其他應用讀 取;
MODE_WORLD_WRITEABLE:表示當前檔可以被其他應 用寫
入。
 getPreferences(mode)方 法 操 作 SharedPreferences, 這 個 方 法 默 認使用當前類不帶包
名的類名作為檔的名稱。
 android 有一套自己的安全模型,當應用程式(.apk)在安裝時系統就會分配給他一個
userid,當該應用要去訪問其他資源比如檔的時候,就需要 userid匹配。
 預設情況下,應用創建的檔/sharedpreferences/資料庫都應該是私有的(位於
/data/data/包 名 ), 其 他 程 式無法訪問。
 除 非 在 創 建 時 指 定 了Context.MODE_WORLD_READABLE 或 者
Context.MODE_WORLD_WRITEABLE ,只有這樣其他程式才能正確訪問。
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 83
版权归作者所有,禁止任何商业用途,违者必究.
7.1.4 訪問 SharedPreferences 資料
 訪問 SharedPreferences中的資料代碼如下:
SharedPreferences sharedPreferences = getSharedPreferences("lxt008",
Context.MODE_PRIVATE);
//getString()第二個參數為缺省值,如果 preference 中不存在該key,將返回缺省值
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age",1);
7.2 不同應用共用資料
7.2.1 訪問其他應用 SharedPreferences 資料
 訪 問 其 他 應 用 Preference , 前 提 條 件 是 : 該 preference 創 建 時 指 定 了
Context.MODE_WORLD_READABLE 或 者
Context.MODE_WORLD_WRITEABLE。
 getSharedPreferences(“lxt008", Context.MODE_WORLD_READABLE);
 其 他應用要訪問上面應用 的 preference,首先需要創建上面應用的 Context,
然後通過 Context 訪問 preference,訪問 preference 時會在應用所在包下的
shared_prefs 目錄找到 preference :
Context otherAppsContext = createPackageContext( “ com.lxt008",
Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences(“lxt008",
Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age",0);
Shared Preferences 案例
 參考:SharedPreferencesMidiPlayer
結果驗證
 切換到 DDMS 視圖
 選擇 File Explorer 標籤
 /data/data/你的專案目錄/shared_prefs
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 84
版权归作者所有,禁止任何商业用途,违者必究.
7.3 Android 檔操作
7.3.1 檔存儲
 檔可以存儲比使用引用更大數量的資料
 Android 提供方法來讀、寫檔
 只有本地檔可以被訪問
 優點:可以存儲大容量的資料
 缺點:檔更新或是格式改變可能會導致巨大的程式設計工作
7.3.2 讀檔操作
 Context.openFileInput(String name)
 打開一個與應用程式聯繫的私有檔輸入流
 當文件不存在時拋出 FileNotFoundException
 FileInputStream in = this.openFileInput("test.txt");//打開文件"test.txt"
 ……
 in.close();//關閉輸入流
7.3.3 寫檔操作
 Context.openFileOutput(String name,int mode)
 開啟一個與應用程式聯繫的私有檔輸出流
 當文件不存在時該文件將被創建
 檔輸出流可以在添加模式中打開,這意味新的資料將被添加到檔的末尾
 FileOutputStream out = this.openFileOutput("test2.txt",MODE_APPEND);
 //打開文件"test2.txt"進行寫操作、使用 MODE_APPEND 在添加模式中打開檔
 ……
 out.close();//關閉輸出流
7.3.4 讀取靜態檔
 要 打 開 打 包 在 程 序 中 的 靜 態 文 件 , 使 用
Resources.openRawResource(R.raw.mydatafile)
 該檔必須放在資料夾res/raw/中
 InputStreamin =this.getResources().openRawResource(R.raw.my);
 … //獲得 Context 資源
 in.close();//關閉輸入流
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 85
版权归作者所有,禁止任何商业用途,违者必究.
檔操作案例
 參考:FileMidiPlayer
7.3.5 使用檔進行資料存儲
首先給大家介紹使用檔如何對資料進行存儲,Activity 提供了openFileOutput()方法可以用
於把資料輸出到檔中,具體的實現過程與在 J2SE 環境中保存資料到檔中是一樣的。
public class FileActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
...
FileOutputStream outStream = this.openFileOutput(“lxt008.txt",
Context.MODE_PRIVATE);
outStream.write(“lxt008".getBytes());
outStream.close();
}
}
openFileOutput()方法的第一參數用於指定檔案名稱,不能包含路徑分隔符號 “/” ,如果檔
不存在,Android 會自動創建它。創建的檔保存在/data/data/<package name>/files 目錄,
如 : /data/data/com.lxt008/files/lxt008.txt , 通 過 點 擊 Eclipse 菜 單 “ Window”-“Show
View”-“Other”,在對話視窗中展開 android 資料夾,選擇下面的 File Explorer 視圖,然後在
File Explorer 視圖中展開/data/data/<package name>/files 目錄就可以看到該檔。
openFileOutput() 方 法 的 第 二 參 數 用 於 指 定 操 作 模 式 , 有 四 種 模 式 , 分 別 為 :
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
7.3.6 讀取檔內容
如果要打開存放在/data/data/<package name>/files 目錄應用私有的檔,可以使用 Activity
提供 openFileInput()方法。
FileInputStream inStream = this.getContext().openFileInput(“lxt008.txt");
Log.i("FileTest", readInStream(inStream)); readInStream()的方法請看本
頁下面備註。 或者直接使用檔的絕對路徑:
File file = new File("/data/data/com.lxt008/files/lxt008.txt");
FileInputStream inStream = new FileInputStream(file);
Log.i("FileTest", readInStream(inStream));
注意:上面檔路徑中的“com.lxt008”為應用所在包,應替換為你自己應用使用的包。
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 86
版权归作者所有,禁止任何商业用途,违者必究.
對於私有文件只能被創建該文件的應用訪問,如果希望檔能被其他應用讀和寫,可以在創 建
文 件 時 , 指 定 Context.MODE_WORLD_READABLE 和
Context.MODE_WORLD_WRITEABLE 許可權。
Activity 還提供了 getCacheDir()和 getFilesDir()方法:
getCacheDir()方法用於獲取/data/data/<package name>/cache 目錄
getFilesDir()方法用於獲取/data/data/<package name>/files 目錄
7.4 SDCard 文件存取
7.4.1 把文件存放在 SDCard
使用 Activity 的 openFileOutput()方法保存檔,檔是存放在手機空間上,一般手機的存儲 空
間不是很大,存放些小檔還行,如果要存放像視頻這樣的大檔,是不可行的。對於像 視頻這樣
的大檔,我們可以把它存放在 SDCard。 SDCard 是幹什麼的?你可以把它看作 是移動硬
碟或 U 盤。
在模擬器中使用 SDCard,你需要先創建一張 SDCard 卡(當然不是真的 SDCard,只是鏡像
檔)。創建 SDCard 可以在 Eclipse 創建模擬器 時隨同創 建,也可 以使用 DOS 命令進行創
建,如下:
在 Dos 視窗中進入 android SDK 安裝路徑的 tools 目錄,輸入以下命令創建一張容量為 2G
的 SDCard,檔尾碼可以隨便取,建議使用.img:
mksdcard 2048MD:AndroidToolsdcard.img
在程式中訪問 SDCard,你需要申請訪問 SDCard的許可權。
在 AndroidManifest.xml 中加入訪問 SDCard 的許可權如下:
<!-- 在 SDCard 中創建與刪除檔許可權-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往 SDCard 寫入資料許可權-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
要往 SDCard 存放檔,程式必須先判斷手機是否裝有 SDCard,並且可以進行讀寫。
注意:訪問 SDCard 必須在 AndroidManifest.xml 中加入訪問 SDCard 的許可權
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard 目錄
File saveFile = new File(sdCardDir, “lxt008.txt”);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write(“lxt008".getBytes());
outStream.close();
}
Environment.getExternalStorageState()方法用於獲取 SDCard的狀態,如果手機裝有SDCard,
並且可以進行讀寫,那麼方法返回的狀態等於 Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用於獲取 SDCard 的目錄,當然要獲取SDCard
的目錄,你也可以這樣寫:
File sdCardDir = new File("/sdcard"); //獲取SDCard 目錄
File saveFile = new File(sdCardDir, “lxt008.txt");
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 87
版权归作者所有,禁止任何商业用途,违者必究.
//上面兩句代碼可以合成一句: File saveFile = new File("/sdcard/lxt008.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write(“lxt008".getBytes());
outStream.close();
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 88
版权归作者所有,禁止任何商业用途,违者必究.
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 89
版权归作者所有,禁止任何商业用途,违者必究.
第八天.SQLite 資料庫技術
8.1 SQLite介紹
8.1.1 資料庫存儲
 在某些情況下,檔不是有效的
 多執行緒資料訪問
 需要交易處理
 如果應用程式處理可能變化的複雜資料結構
 資料庫對於創建它們的包套件是私有的
8.1.2 SQLite 介紹
 SQLite 是一個羽量級的資料庫,體積大小只用幾千位元組
 一些 SQL 的指令只是部分支援,例如: ALTER、TABLE
 廣泛應用在嵌入式移動設備之上。
 參閱 http://www.sqlite.org 獲取更多資訊
8.2 創建/打開/刪除資料庫
8.2.1 創建資料庫
 Context.createDatabase(
String name, //
int version, //
int mode, //
CursorFactory factory //
)
 創建一個新的資料庫並返回一個 SQLiteDatabase 物件
 資料庫不能被創建,則拋出 FileNotFoundException 異常
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 90
版权归作者所有,禁止任何商业用途,违者必究.
8.2.2 其他創建資料庫的方法
SQLiteDatabase mydataBase=SQLiteDatabase.crrrreeeeaaaatttteeee((((nnnneeeewwww CCCCuuuurrrrssssoooorrrrFFFFaaaaccccttttoooorrrryyyy(((()))){{{{
//創建一個資料庫
//工 廠 類,一個可選工廠類,當查詢時調用來產生實體一個游標
public Cursor newCursor(SQLiteDatabase db,
SQLiteCursorDriver masterQuery, String editTable,
SQLiteQuery query) {
return null;
}
});
SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db",
MOOOODDDDEEEE__PPPPRRRRIIIIVVVVAAAATTTTEEEE,,,, nnnneeeewwww CCCCuuuurrrrssssoooorrrrFFFFaaaaccccttttoooorrrryyyy(((()))){{{{
//創建新的資料庫,名稱 myDatabase,模式MODE_PRIVATE,游標工廠
//工 廠 類,一個可選工廠類,當查詢時調用來產生實體一個游標
public Cursor newCursor(SQLiteDatabase db,
SQLiteCursorDriver masterQuery, String editTable,
SQLiteQuery query) {
return null;
}
});
8.2.3 刪除資料庫
 Context.deleteDatabase(String name)
 刪除指定名稱的資料庫
 假如資料庫成功刪除則返回 true,失敗則為 false
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 91
版权归作者所有,禁止任何商业用途,违者必究.
8.2.4 打開資料庫
 Context.openDatabase(String file,CursorFactory factory)
 打開一個存在的資料庫並返回一個 SQLiteDatabase 物件
 如果資料庫不存在則拋出 FileNotFoundException 異常
 如創建一個名為:myDataBase 的資料庫,尾碼為.db
 SQLiteDatabase my_DataBase=
this.openOrCreateDatabase(
"myDateBase.db",
MODE_PRIVATE, null);
 my_DataBase.close();//不要忘記關閉資料庫
8.2.5 非查詢 SQL 指令
 SQLiteDatabase.execSQL(String sql)
 可以用來執行非查詢 SQL 指令,這些指令沒有結果, 包括: CREATE
TABLE / DROP TABLE / INSERT 等等。
8.3 創建/刪除表
8.3.1 SQLite 基礎案例
private SQLiteDatabase mSQLiteDatabase=null;
// 打開已經存在的資料庫
mSQLiteDatabase = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE,
null);
/* 在資料庫 mSQLiteDatabase 中創建一個表 */
mSQLiteDatabase.execSQL(CREATE_TABLE);
/* 刪除資料庫 */
this.deleteDatabase(DATABASE_NAME);
/* 退出時,不要忘記關閉 */
mSQLiteDatabase.close();
/* 刪除一個表 */
mSQLiteDatabase.execSQL("DROPTABLE" + TABLE_NAME);
/* 更新一條資料 */
ContentValues cv = newContentValues();
cv.put(TABLE_NUM, miCount);
cv.put(TABLE_DATA, "修改後的資料" +miCount);
mSQLiteDatabase.update(TABLE_NAME, cv, TABLE_NUM + "=" +
Integer.toString(miCount - 1),null);
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 92
版权归作者所有,禁止任何商业用途,违者必究.
UpdataAdapter(); //更新介面
/* 向表中添加一條數據 */
ContentValues cv = newContentValues();
cv.put(TABLE_NUM, miCount);
cv.put(TABLE_DATA, "測試資料庫資料" + miCount);
mSQLiteDatabase.insert(TABLE_NAME, null, cv);
miCount++;
UpdataAdapter(); //更新介面
/* 從表中刪除指定的一條資料 */
mSQLiteDatabase.execSQL("DELETE FROM " + TABLE_NAME + " WHERE _id="
+Integer.toString(miCount));
miCount--;
if (miCount <
0){ miCount
= 0;
}
UpdataAdapter(); //更新介面
8.3.2 SQLite 基礎案例:更新視圖顯示
/* 更新視圖顯示 */
public void UpdataAdapter(){
// 獲取資料庫 Phones 的Cursor
Cursor cur = mSQLiteDatabase.query(TABLE_NAME, newString[] { TABLE_ID,
TABLE_NUM, TABLE_DATA }, null, null, null, null, null);
miCount = cur.getCount();
if (cur != null && cur.getCount() >=0) {
// ListAdapter 是 ListView和後臺資料的橋樑
ListAdapter adapter = newSimpleCursorAdapter(this,
// 定義 List 中每一行的顯示範本
// 表示每一行包含兩個資料項目
android.R.layout.simple_list_item_2,
// 資料庫的 Cursor物件
cur,
// 從資料庫的 TABLE_NUM 和 TABLE_DATA 兩列中取資料
newString[] { TABLE_NUM, TABLE_DATA },
// 與 NAME 和 NUMBER 對應的 Views
new int[] { android.R.id.text1, android.R.id.text2 });
/* 將 adapter 添加到 m_ListView中 */
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 93
版权归作者所有,禁止任何商业用途,违者必究.
m_ListView.setAdapter(adapter);
} }
** 研究案例DatabaseDemo1
8.4 CRUD 操作
8.4.1 查詢 SQL 指令-游標Cursors
 Android 使用游標(Cursors)來導航流覽查詢結果
 游標(Cursors)被 android.database.Cursor 物件來描述
 一 個 游 標(Cursors)是 一 個 簡 單 的 指標,它從查詢結果的一個元組跳到下一個元組 (或 前一個或第一
個……)
 游標(Cursors)在它定位位置的那一刻返回元組資料
//為創建 Cursor(游標),必須執行查詢,要麼通過 SQL 使用rawQuery()方法
//或是更精心設計的方法,像query()方法
Cursor cur=my_DataBase.rawQuery("SELECT * FORM test", null); if(cur!=null){//游
標不為空
//返回給定名稱的列的基於 0 開始的index,如果該屬性列不存在則返回-1
//通過它們的 index來檢索屬性值
int numColumn=cur.getColumnIndex("someNumber");
if(cur.moveToFirst()){
//cur.moveToFirst()讓 游 標 指 向第一行,如果游標指向第一行,則返回 true
do {
int num=cur.getInt(numColumn);//獲 得 當 前 行該屬性的值
/*Cursor提供了不同的方法來回索不同的資料類型
例如 getInt(int index)/getString(int index)等等*/
/*做一些事情*/
} while (cur.moveToNext());
/*游標移動到下一行,如果游標已經通過了結果集中的最後, 即沒有行可以移動時,則返
回 false*/
//其他可能移動的是 previous() 和 first()方法
}
}
5.5 交易處理
5.5.1 使用事務操作 SQLite 資料庫
使 用 SQLiteDatabase 的 beginTransaction() 方 法 可 以 開 啟 一 個 事 務 , 程 序 執 行 到
endTransaction() 方法時會檢查事務的標誌是否為成功,如果為成功則提交事務,否則回滾
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 94
版权归作者所有,禁止任何商业用途,违者必究.
事 務。 當 應 用需 要 提 交事 務 , 必須 在 程 序執 行 到 endTransaction() 方法 之 前 使 用
setTransactionSuccessful() 方法設置事務的標誌為成功,如果不調用setTransactionSuccessful() 方法,預設
會回滾事務。使用例子如下:
SQLiteDatabase db = ....;
db.beginTransaction();//開始事務
try {
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{“lxt008", 4});
db.execSQL("update person set name=? where personid=?", new Object[]{“lxt008", 1});
db.setTransactionSuccessful();//調用此方法會在執行到 endTransaction() 時提交當前事
務,如果不調用此方法會回滾事務
} finally {
db.endTransaction();//由事務的標誌決定是提交事務,還是回滾事務
}
db.close();
上面兩條 SQL 語句在同一個事務中執行。
其他
 資料庫輔助類
 研究案例 DatabaseDemo2
 資料庫小工具
 Sqlitebrowser 可以簡單管理 Sqlite 資料庫
第九天.ContentProvider 與 BroadcastReceiver
9.1 ContentProvider
9.1.1 使用 ContentProvider 共用資料
當應用繼承 ContentProvider 類,並重寫該類用於提供資料和存儲資料的方法,就可以向其
他應用共用其資料。雖然使用其他方法也可以對外共用資料,但資料訪問方式會因數據存儲 的
方式而不同, 如:採用檔 方式對外共 用資料, 需要進行檔 操作讀寫資 料;采 用
sharedpreferences 共用資料,需要使用 sharedpreferences API 讀寫資料。而使用 ContentProvider
共用資料的好處是統一了資料訪問方式。
當應用需要通過 ContentProvider 對外共用資料時,第一步需要繼承 ContentProvider 並重寫
下面方法:
public class PersonContentProvider extends
ContentProvider{ public boolean onCreate()
public Uri insert(Uri uri, ContentValues values)
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 95
版权归作者所有,禁止任何商业用途,违者必究.
public int delete(Uri uri, String selection, String[] selectionArgs)
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String
sortOrder)
public String getType(Uri uri)}
第二步需要在 AndroidManifest.xml 使用<provider>對該 ContentProvider 進行配置,為了能讓
其他應用找到該 ContentProvider , ContentProvider 採用了 authorities(主機名稱/功能變數
名稱)對它 進行唯一標識,你可以把 ContentProvider 看作是一個網站(想想,網站也是提
供資料者), authorities 就是他的功能變數名稱:
<manifest .... >
<application android:icon="@drawable/icon" android:label="@string/app_name">
<provider android:name=".PersonContentProvider"
android:authorities=“com.lxt008.provider.personprovider"/>
</application>
</manifest>
注意:一旦應用繼承了 ContentProvider 類,後面我們就會把這個應用稱為 ContentProvider
(內容提供者)。
9.1.2 Uri 介紹
Uri 代表了要操作的資料,Uri 主要包含了兩部分資訊:1》需要操作的ContentProvider ,2》
對 ContentProvider 中的什麼資料進行操作,一個 Uri 由以下幾部分組成:
ContentProvider(內容提供者)的 scheme 已經由 Android 所規定, scheme 為:content://
主機名稱(或叫Authority)用於唯一標識這個ContentProvider,外部調用者可以根據這個標
識 來找到它。 路徑(path)可以用來表示我們要操作的資料,路徑的構建應根據業務而
定,如下:
要操作 person 表中 id 為 10 的記錄,可以構建這樣的路徑:/person/10
要操作 person 表中 id 為 10 的記錄的 name 欄位, person/10/name
要操作 person 表中的所有記錄,可以構建這樣的路徑:/person 要操
作 xxx 表中的記錄,可以構建這樣的路徑:/xxx
當然要操作的資料不一定來自資料庫,也可以是檔等他存儲方式,如下:
要操作 xml 檔中 person 節點下的 name 節點,可以構建這樣的路徑:/person/name 如果要把一個字串轉
換成 Uri,可以使用 Uri 類中的 parse()方法,如下:
Uri uri = Uri.parse("content://com.lxt008.provider.personprovider/person")
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 96
版权归作者所有,禁止任何商业用途,违者必究.
9.1.3 UriMatcher 類使用介紹
因為 Uri 代表了要操作的資料,所以我們很經常需要解析 Uri,並從 Uri 中獲取資料。Android
系統提供了兩個用於操作 Uri 的工具類,分別為 UriMatcher 和 ContentUris 。掌握它們的使
用,會便於我們的開發工作。
UriMatcher 類用於匹配 Uri,它的用法如下: 首先第一
步把你需要匹配 Uri 路徑全部給註冊上,如下:
//常量UriMatcher.NO_MATCH 表示不匹配任何路徑的返回碼
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果 match()方法匹配content://com.lxt008.provider.personprovider/person 路徑,返回匹配碼
為 1
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person”, 1);//添加需要匹配uri,如果匹 配就會返回
匹配碼
//如果 match()方法匹配 content://com.lxt008.provider.personprovider/person/230 路徑,返回匹
配碼為 2
sMatcher.addURI(“com.lxt008.provider.personprovider”, “person/#”,2);//#號為萬用字元
switch(sMatcher.match(Uri.parse("content://com.lxt008.provider.personprovider/person/10")))
{ case 1
break;
case 2
break;
default://不匹配
break;
}
註冊完需要匹配的 Uri 後,就可以使用 sMatcher.match(uri)方法對輸入的 Uri 進行匹配,如果
匹 配就返 回匹 配碼 , 匹配 碼是 調 用 addURI() 方 法傳入 的第 三 個參 數, 假 設匹 配
content://com.lxt008.provider.personprovider/person 路徑,返回的匹配碼為1
ContentUris 類用於獲取 Uri 路徑後面的 ID 部分,它有兩個比較實用的方法:
withAppendedId(uri, id)用於為路徑加上ID 部分:
Uri uri =Uri.parse("content://com.lxt008.provider.personprovider/person")
Uri resultUri = ContentUris.withAppendedId(uri, 10);
//生成後的Uri 為:content://com.lxt008.provider.personprovider/person/10
parseId(uri)方法用於從路徑中獲取ID 部分:
Uri uri =Uri.parse("content://com.lxt008.provider.personprovider/person/10")
long personid = ContentUris.parseId(uri);//獲取的結果為:10
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 97
版权归作者所有,禁止任何商业用途,违者必究.
9.1.4 使用 ContentProvider 共用資料
ContentProvider 類主要方法的作用:
public boolean onCreate()
該 方 法 在 ContentProvider 創 建 後 就 會 被 調 用, Android 在 系 統 啟 動 時 就會 創 建
ContentProvider 。
public Uri insert(Uri uri, ContentValues values)
該方法用於供外部應用往 ContentProvider 添加資料。
public int delete(Uri uri, String selection, String[] selectionArgs)
該方法用於供外部應用從 ContentProvider 刪除資料。
public int update(Uri uri, ContentValuesvalues,String selection, String[] selectionArgs)
該方法用於供外部應用更新 ContentProvider 中的資料。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
StringsortOrder)
該方法用於供外部應用從 ContentProvider 中獲取資料。
public String getType(Uri uri)
該方法用於返回當前 Url 所代表資料的 MIME 類型。如果操作的資料屬於集合類型,那麼
MIME 類型字串應該以 vnd.android.cursor.dir/開頭,例如:要得到所有 person 記錄的 Uri
為 content://com.lxt008.provider.personprovider/person ,那 麼返 回的 MIME 類型字串應該為:
“vnd.android.cursor.dir/person”。如果要操作的資料屬於單一資料,那麼 MIME 類型字串
應 該 以 vnd.android.cursor.item/ 開 頭 , 例 如 : 得 到 id 為 10 的 person 記 錄 , Uri 為
content://com.lxt008.provider.personprovider/person/10 ,那 麼 返 回的 MIME 類型字串應該為:
“vnd.android.cursor.item/person”。
9.2 ContentResolver
9.2.1 ContentResolver
當外部應用需要對 ContentProvider 中的資料進行添加、刪除、修改和查詢操作時,可以使
用 ContentResolver 類來完成, 要獲取 ContentResolver 物件, 可以使用 Activity 提供的
getContentResolver()方法。 ContentResolver 類提供了與 ContentProvider 類相同簽名的四個
方法:
public Uri insert(Uri uri, ContentValues values)
該方法用於往 ContentProvider 添加資料。
public int delete(Uri uri, String selection, String[] selectionArgs)
該方法用於從 ContentProvider 刪除資料。
public int update(Uri uri, ContentValuesvalues,String selection, String[] selectionArgs)
該方法用於更新 ContentProvider 中的資料。
作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下
载)
作者:神秘的 N 联系 QQ 369428455 98
版权归作者所有,禁止任何商业用途,违者必究.
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
StringsortOrder)
該方法用於從 ContentProvider 中獲取資料。
這些方法的第一個參數為 Uri,代表要操作的是哪個 ContentProvider 和對其中的什麼資料進
行操作 ,假 設給定 的是 : Uri.parse(“content://com.lxt008.provider.personprovider/person/10”) ,
那麼將會對主機名稱為 com.lxt008.provider.personprovider 的 ContentProvider 進行操作,操作
的 資料為 person 表中 id 為 10 的記錄。
使用 ContentResolver 對 ContentProvider 中的資料進行添加、刪除、修改和查詢操作:
ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse(“content://com.lxt008.provider.personprovider/person");
//添加一條記錄
ContentValues values = new ContentValues();
values.put("name", “lxt008");
values.put("age", 35);
resolver.insert(uri, values);
//獲取 person 表中所有記錄
Cursor cursor = resolver.query(uri, null, null, null, "personid desc");
while(cursor.moveToNext()){
Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1));
}
//把 id 為 1 的記錄的 name 欄位值更改新為 liming
ContentValues updateValues = new ContentValues();
updateValues.put("name", "liming");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);
//刪除 id 為 2 的記錄
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);
9.2.2 讀取電話本
Demo 請參考systemcontacts
進程間交互可以通過 ContentResolver 和 ContentProvider 類處理。
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)
14天學會安卓開發(完整版)

More Related Content

What's hot

Redis实战《红丸出品》
Redis实战《红丸出品》Redis实战《红丸出品》
Redis实战《红丸出品》billowqiu
 
程式人雜誌 -- 2013 年 1 月 (創刊號)
程式人雜誌 -- 2013 年 1 月 (創刊號)程式人雜誌 -- 2013 年 1 月 (創刊號)
程式人雜誌 -- 2013 年 1 月 (創刊號)鍾誠 陳鍾誠
 
Gps Guide L3
Gps Guide L3Gps Guide L3
Gps Guide L3Nasir
 
Hibernate reference
Hibernate referenceHibernate reference
Hibernate referencemayewangxing
 
Memcached
MemcachedMemcached
Memcachedfeizone
 
Memcached
MemcachedMemcached
Memcachednowise
 
餓鬼事
餓鬼事餓鬼事
餓鬼事宏 恆
 
說演故事在閱讀教學上的應用
說演故事在閱讀教學上的應用說演故事在閱讀教學上的應用
說演故事在閱讀教學上的應用軒弘 陳軒弘
 
Lucene 原理与代码分析完整版
Lucene 原理与代码分析完整版Lucene 原理与代码分析完整版
Lucene 原理与代码分析完整版山城 碧海
 
尽管去做
尽管去做尽管去做
尽管去做hievan
 
Struts2入门v3.0
Struts2入门v3.0Struts2入门v3.0
Struts2入门v3.0yuanao
 
Spring从入门到精通
Spring从入门到精通Spring从入门到精通
Spring从入门到精通yiditushe
 
9500用户指南
9500用户指南9500用户指南
9500用户指南robezhe
 

What's hot (17)

微積分
微積分微積分
微積分
 
Xerox Guide
Xerox GuideXerox Guide
Xerox Guide
 
C8600 cn
C8600 cnC8600 cn
C8600 cn
 
Redis实战《红丸出品》
Redis实战《红丸出品》Redis实战《红丸出品》
Redis实战《红丸出品》
 
程式人雜誌 -- 2013 年 1 月 (創刊號)
程式人雜誌 -- 2013 年 1 月 (創刊號)程式人雜誌 -- 2013 年 1 月 (創刊號)
程式人雜誌 -- 2013 年 1 月 (創刊號)
 
Gps Guide L3
Gps Guide L3Gps Guide L3
Gps Guide L3
 
Hibernate reference
Hibernate referenceHibernate reference
Hibernate reference
 
Phpunit book
Phpunit bookPhpunit book
Phpunit book
 
Memcached
MemcachedMemcached
Memcached
 
Memcached
MemcachedMemcached
Memcached
 
餓鬼事
餓鬼事餓鬼事
餓鬼事
 
說演故事在閱讀教學上的應用
說演故事在閱讀教學上的應用說演故事在閱讀教學上的應用
說演故事在閱讀教學上的應用
 
Lucene 原理与代码分析完整版
Lucene 原理与代码分析完整版Lucene 原理与代码分析完整版
Lucene 原理与代码分析完整版
 
尽管去做
尽管去做尽管去做
尽管去做
 
Struts2入门v3.0
Struts2入门v3.0Struts2入门v3.0
Struts2入门v3.0
 
Spring从入门到精通
Spring从入门到精通Spring从入门到精通
Spring从入门到精通
 
9500用户指南
9500用户指南9500用户指南
9500用户指南
 

Similar to 14天學會安卓開發(完整版)

深入浅出My sql数据库开发、优化与管理维护
深入浅出My sql数据库开发、优化与管理维护深入浅出My sql数据库开发、优化与管理维护
深入浅出My sql数据库开发、优化与管理维护colderboy17
 
Think php3.0 完全开发手册
Think php3.0 完全开发手册Think php3.0 完全开发手册
Think php3.0 完全开发手册qianhuazhu
 
Csdn Java电子杂志第2期
Csdn Java电子杂志第2期Csdn Java电子杂志第2期
Csdn Java电子杂志第2期yiditushe
 
尽管去做——无压工作的艺术
尽管去做——无压工作的艺术尽管去做——无压工作的艺术
尽管去做——无压工作的艺术Jim Liu
 
淘宝直通车宝典
淘宝直通车宝典淘宝直通车宝典
淘宝直通车宝典zack z
 
条码公司调查取样2010 1 30
条码公司调查取样2010 1 30条码公司调查取样2010 1 30
条码公司调查取样2010 1 30changeself
 
中国移动互联网发展状况调查报告
中国移动互联网发展状况调查报告中国移动互联网发展状况调查报告
中国移动互联网发展状况调查报告bihaizhou
 
钢筋抽样软件Ggj10.0教材
钢筋抽样软件Ggj10.0教材钢筋抽样软件Ggj10.0教材
钢筋抽样软件Ggj10.0教材Sun Wen
 
Flexsim handbook
Flexsim handbookFlexsim handbook
Flexsim handbookhexiyaba
 
Ibatis Sql Map中文指南
Ibatis Sql Map中文指南Ibatis Sql Map中文指南
Ibatis Sql Map中文指南yiditushe
 
漫畫工作室 Comic Studio 手冊
漫畫工作室 Comic Studio 手冊漫畫工作室 Comic Studio 手冊
漫畫工作室 Comic Studio 手冊filmdoing
 
Memcached全面剖析
Memcached全面剖析Memcached全面剖析
Memcached全面剖析chen vivian
 
Csdn Emag(Oracle)第三期
Csdn Emag(Oracle)第三期Csdn Emag(Oracle)第三期
Csdn Emag(Oracle)第三期yiditushe
 
Distributed system engineering_practice
Distributed system engineering_practiceDistributed system engineering_practice
Distributed system engineering_practiceknuthocean
 
Moodle學習心法(2010年第二版)
Moodle學習心法(2010年第二版)Moodle學習心法(2010年第二版)
Moodle學習心法(2010年第二版)Pau Fong Yong
 
2006 年中国博客调查报告
2006 年中国博客调查报告2006 年中国博客调查报告
2006 年中国博客调查报告sugeladi
 

Similar to 14天學會安卓開發(完整版) (20)

080620-16461915
080620-16461915080620-16461915
080620-16461915
 
深入浅出My sql数据库开发、优化与管理维护
深入浅出My sql数据库开发、优化与管理维护深入浅出My sql数据库开发、优化与管理维护
深入浅出My sql数据库开发、优化与管理维护
 
Think php3.0 完全开发手册
Think php3.0 完全开发手册Think php3.0 完全开发手册
Think php3.0 完全开发手册
 
Csdn Java电子杂志第2期
Csdn Java电子杂志第2期Csdn Java电子杂志第2期
Csdn Java电子杂志第2期
 
尽管去做——无压工作的艺术
尽管去做——无压工作的艺术尽管去做——无压工作的艺术
尽管去做——无压工作的艺术
 
淘宝直通车宝典
淘宝直通车宝典淘宝直通车宝典
淘宝直通车宝典
 
条码公司调查取样2010 1 30
条码公司调查取样2010 1 30条码公司调查取样2010 1 30
条码公司调查取样2010 1 30
 
中国移动互联网发展状况调查报告
中国移动互联网发展状况调查报告中国移动互联网发展状况调查报告
中国移动互联网发展状况调查报告
 
钢筋抽样软件Ggj10.0教材
钢筋抽样软件Ggj10.0教材钢筋抽样软件Ggj10.0教材
钢筋抽样软件Ggj10.0教材
 
Flexsim handbook
Flexsim handbookFlexsim handbook
Flexsim handbook
 
Ibatis Sql Map中文指南
Ibatis Sql Map中文指南Ibatis Sql Map中文指南
Ibatis Sql Map中文指南
 
漫畫工作室 Comic Studio 手冊
漫畫工作室 Comic Studio 手冊漫畫工作室 Comic Studio 手冊
漫畫工作室 Comic Studio 手冊
 
Memcached
MemcachedMemcached
Memcached
 
Memcached全面剖析
Memcached全面剖析Memcached全面剖析
Memcached全面剖析
 
Csdn Emag(Oracle)第三期
Csdn Emag(Oracle)第三期Csdn Emag(Oracle)第三期
Csdn Emag(Oracle)第三期
 
Distributed system engineering_practice
Distributed system engineering_practiceDistributed system engineering_practice
Distributed system engineering_practice
 
Direct show
Direct showDirect show
Direct show
 
Moodle學習心法(2010年第二版)
Moodle學習心法(2010年第二版)Moodle學習心法(2010年第二版)
Moodle學習心法(2010年第二版)
 
2006 年中国博客调查报告
2006 年中国博客调查报告2006 年中国博客调查报告
2006 年中国博客调查报告
 
Micro2440 Um 20090817
Micro2440 Um 20090817Micro2440 Um 20090817
Micro2440 Um 20090817
 

14天學會安卓開發(完整版)

  • 1. 作者:神秘的 N 联系 QQ 369428455 1 14 天學會安卓開發
  • 2. 2 14 天學會安卓開發........................................................................................................... 1 前言.......................................................................................................................... 7 第一天 Android 架構與環境搭建....................................................................................... 7 1.1 android 基礎......................................................................................................... 7 1.1.1 Android 是什麼?.......................................................................................... 7 1.1.2 Android 的特點!.......................................................................................... 8 1.1.3 Android 優缺點!.......................................................................................... 8 1.1.4 Android 架構............................................................................................... 9 1.2 搭建 android 環境............................................................................................... 13 1.2.1 安裝 Java JDK 並配置 java 環境變數........................................................ 13 1.2.2 下載 eclipse 安裝 ADT 外掛程式.............................................................. 15 1.2.3 安裝 android sdk 並更新版本 ................................................................... 18 1.2.4 配置 android 環境變數 ............................................................................. 21 1.2.5 配置 ADV 安卓虛擬機器 並寫 hello android 測試.................................... 22 1.2.6 特別贈送:直接下載 Android Developer Tools 即可省略以上 5 個步驟.......... 25 第二天 Android 程式設計基礎........................................................................................ 33 2.1 深入瞭解安卓.................................................................................................... 33 2.1.1 工程結構解析.......................................................................................... 34 2.1.2 Android 中 JAVA包功能描述..................................................................... 34 2.1.3 Android 程式核心元件 .............................................................................. 35 2.2 瞭解 Activity ..................................................................................................... 35 2.2.1 Activity 的概念 ......................................................................................... 35 2.2.2 Activity 的生命週期 .................................................................................. 35 2.3 瞭解 Intent......................................................................................................... 37 2.3.1 什麼是意圖............................................................................................. 37 2.4 Bundle 類的作用 ................................................................................................ 39 2.5 回顧 helloandroid 看看安卓程式是怎麼運作的 ................................................... 39 2.6 寫第二個程式 ActivityLifeCycle ......................................................................... 41 2.7 使用篩檢程式.................................................................................................... 45 第三天.UI 事件處理與佈局管理...................................................................................... 51 3.1 View 與 ViewGroup ............................................................................................ 51 3.1.1 Android 介面元素 ..................................................................................... 51 3.1.2 認識 View................................................................................................ 51 3.1.3 認識 ViewGroup....................................................................................... 51 3.1.4 View 與 ViewGroup 的關係....................................................................... 51 3.2 事件處理機制.................................................................................................... 52 3.2.1Toast 控制項............................................................................................. 52 3.2.2 事件處理 Demo........................................................................................ 53 3.3 布介面佈局方式................................................................................................ 55 3.3.1 LinearLayout(線性佈局)........................................................................ 55 3.3.2 AbsoluteLayout(絕對佈局)..................................................................... 56 3.3.3 RelativeLayout(相對佈局) ..................................................................... 56 3.3.4 TableLayout(表格佈局)......................................................................... 57 3.3.5 FrameLayout(框架佈局)........................................................................ 59 3.3.6 佈局之間的關係...................................................................................... 59 3.4 樣式和主題(style&theme)................................................................................... 60
  • 3. 3 第四天.基礎 UI 控制項 ................................................................................................... 61 4.1 基本控制項介紹................................................................................................ 61 4.2 認識 Widget 元件 .............................................................................................. 66 4.3 Widget 組件類繼承關係...................................................................................... 67 第五天.高級 UI 控制項 ................................................................................................... 67 第六天.Android Service ................................................................................................... 73 6.1 Service 概述....................................................................................................... 73 6.1.1 Service 概念及用途................................................................................... 73 6.2 Service 生命週期................................................................................................ 73 6.3 啟動與停止 Service............................................................................................ 74 6.3.1 Service 開發步驟 ...................................................................................... 74 6.3.2 採用 startService()啟動服務...................................................................... 75 6.3.3 採用 bindService()啟動服務...................................................................... 75 6.3.4 Service 服務演示 ...................................................................................... 76 6.4 Notification 通知................................................................................................. 80 6.4.1 Android 中的通知(Notification) .................................................................. 80 6.5 案例分析........................................................................................................... 80 第七天.SharedPreferences 與文件..................................................................................... 81 7.1 SharedPreferences ............................................................................................... 81 7.1.1 資料存儲方式........................................................................................... 81 7.1.2 SharedPreferences...................................................................................... 81 7.1.3 SharedPreferences 存儲資料....................................................................... 82 7.1.4 訪問 SharedPreferences 資料...................................................................... 83 7.2 不同應用共用資料............................................................................................. 83 7.2.1 訪問其他應用 SharedPreferences 資料....................................................... 83 7.3 Android 檔操作................................................................................................... 84 7.3.1 檔存儲.................................................................................................... 84 7.3.2 讀檔操作.................................................................................................. 84 7.3.3 寫檔操作................................................................................................. 84 7.3.4 讀取靜態檔.............................................................................................. 84 7.3.5 使用檔進行資料存儲................................................................................ 85 7.3.6 讀取檔內容............................................................................................. 85 7.4 SDCard 文件存取............................................................................................... 86 7.4.1 把文件存放在 SDCard.............................................................................. 86 第八天.SQLite 資料庫技術.............................................................................................. 89 8.1 SQLite 介紹 ....................................................................................................... 89 8.1.1 資料庫存儲.............................................................................................. 89 8.1.2 SQLite 介紹.............................................................................................. 89 8.2 創建/打開/刪除資料庫....................................................................................... 89 8.2.1 創建資料庫............................................................................................. 89 8.2.2 其他創建資料庫的方法............................................................................ 90 8.2.3 刪除資料庫............................................................................................. 90 8.2.4 打開資料庫............................................................................................. 91 8.2.5 非查詢 SQL 指令.................................................................................... 91 8.3 創建/刪除表...................................................................................................... 91 8.3.1 SQLite 基礎案例....................................................................................... 91
  • 4. 4 8.3.2 SQLite 基礎案例:更新視圖顯示 .............................................................. 92 8.4 CRUD 操作........................................................................................................ 93 5.5 交易處理........................................................................................................... 93 5.5.1 使用事務操作 SQLite 資料庫.................................................................... 93 第九天.ContentProvider 與 BroadcastReceiver ................................................................... 94 9.1 ContentProvider .................................................................................................. 94 9.1.1 使用 ContentProvider 共用資料................................................................. 94 9.1.2 Uri 介紹 ................................................................................................... 95 9.1.3 UriMatcher 類使用介紹............................................................................. 96 9.1.4 使用 ContentProvider 共用資料................................................................. 97 9.2 ContentResolver .................................................................................................. 97 9.2.1 ContentResolver ........................................................................................ 97 9.2.2 讀取電話本............................................................................................. 98 9.3 BroadcastReceiver ............................................................................................... 99 9.3.1 Broadcast Intent Receiver............................................................................ 99 9.3.2 廣播接收者--BroadcastReceiver................................................................. 99 9.3.4 廣播接收者............................................................................................100 9.3.5 鬧鐘與提醒服務 Demo............................................................................101 第十天.Android 網路與通信 ...........................................................................................101 10.1 Android 網路通訊介紹...................................................................................101 10.1.1 網路通訊技術.......................................................................................101 10.2 Java.net.........................................................................................................102 10.2.2 主 Activity .............................................................................................102 10.2.3 直接獲取資料.......................................................................................103 10.2.4 以 Get 方式上傳參數.............................................................................104 10.2.5 以 Post 方式上傳參數............................................................................104 10.3 Apache HttpClient ..........................................................................................106 10.3.1 使用 HttpClient:主 Activity.....................................................................106 10.3.2 HttpClient:HttpGet ..................................................................................107 10.3.3 HttpClient:HttpPost .................................................................................108 10.4 裝載並顯示 Web 網頁....................................................................................109 10.4.1 用執行緒刷新網頁顯示.........................................................................109 10.4.2 裝載網頁並顯示....................................................................................110 10.5 Socket 程式設計複習.....................................................................................111 第十一天.Android 圖形技術 ...........................................................................................111 11.1 Paint 類與 Canvas 類 ........................................................................................111 11.1.1 繪圖 Paint 類.........................................................................................111 11.1.2 在執行緒中更新介面.............................................................................112 11.1.3 Canvas 畫布類.......................................................................................112 11.2 SurfaceView 類................................................................................................113 11.2.1 SurfaceView 類.......................................................................................113 11.2.2 SurfaceView 使用要點............................................................................113 11.2.3 SurfaceView 回檔方法............................................................................114 11.2.3 繪圖執行緒...........................................................................................114 11.2.4 繪圖方法..............................................................................................114 11.3 繪製幾何形狀.................................................................................................115
  • 5. 5 11.3.1 繪製幾何形狀.......................................................................................115 11.3.2 ShapeDrawable 繪製幾何圖形.................................................................116 11.4 圖形繪製與旋轉縮放......................................................................................117 11.4.1 繪製圖像 1............................................................................................117 11.4.2 繪製圖像 2............................................................................................117 11.4.3 繪製圖像 3............................................................................................118 11.4.5 圖像旋轉..............................................................................................118 11.4.6 圖像縮放..............................................................................................119 11.5 用 Shader 類進行渲染.....................................................................................119 第十二天.Android 動畫技術 ...........................................................................................120 12.1 Tween 動畫......................................................................................................120 12.1.1 動畫實現..............................................................................................120 12.1.2 代碼實現 Tween 動畫 1..........................................................................120 12.1.3 代碼實現 Tween 動畫 2..........................................................................120 12.2.4 代碼實現 Tween 動畫:main.xml..............................................................121 12.2.5 XML 佈局實現 Tween 動畫....................................................................121 12.2 Frame 幀動畫..................................................................................................123 12.2.1 代碼實現 Frame 動畫............................................................................123 12.2.2 XML 實現 Frame 動畫............................................................................124 12.3 GIF 動畫.........................................................................................................125 12.4 全屏與橫屏技術.............................................................................................125 12.5 獲取螢幕屬性.................................................................................................125 第十三天.Android 多媒體開發........................................................................................126 13.1 播放音樂........................................................................................................126 13.1.1 多媒體架構...........................................................................................126 13.1.2 Open Core 框架......................................................................................127 13.1.3 調用層次關係.......................................................................................127 13.1.4 音樂播放..............................................................................................127 13.2 播放視頻........................................................................................................128 13.2.1 播放視頻.....................................................................................................128 13.2.2 音樂/視頻播放案例...............................................................................128 13.3 錄製音訊........................................................................................................129 13.3.1 實現錄音功能.......................................................................................129 13.3.2 音視頻採集...........................................................................................129 13.4 拍攝照片........................................................................................................130 13.4.1 錄音/拍照案例......................................................................................130 13.5 鈴聲設置........................................................................................................130 13.5.1 鈴聲設置:設置各種鈴聲......................................................................130 13.5.2 鈴聲設置:回呼函數.............................................................................130 13.5.3 鈴聲設置:main.xml .............................................................................131 13.5.4 鈴聲設置:AndroidManifest.xml ............................................................132 14. Android 項目案例: mp3 播放機 .................................................................................132 14.1 需求列表.........................................................................................................132 14.1.1 需求解析:1.創建 Web 應用..................................................................133 14.1.2 需求解析:2.編寫 XML 檔....................................................................133 14.1.3 需求解析:3.網路下載 XML .................................................................133
  • 6. 6 14.1.4 需求解析:4.解析 XML 文件示.............................................................133 14.1.5 需求解析:5.下載 mp3..........................................................................134 14.1.6 需求解析:6.多執行緒下載 mp3............................................................134 14.1.7 需求解析:7.顯示 mp3 下載進度...........................................................134 14.1.8 需求解析:8.線上播放 mp3...................................................................134 14.1.9 需求解析:9.後臺播放 mp3...................................................................135 14.1.10 需求解析:10.植入廣告.......................................................................135 14.1.11 需求解析:11.關於對話方塊................................................................135 14.1.12 需求解析:12.用主題控制字體與顏色 .................................................135
  • 7. 7 前言: 本人也是菜鳥,老鳥看了此文有哪裡不好之處敬請指點,本書是根據<<Android 應用開 發揭秘>>攢寫的,如何把一本書讀薄,是一件值得思考的問題.本書針對有 JAVA 基礎的孩紙們, 基 本 JAVA 基礎都沒的,趕緊去找 21 天學會 JAVA 回去從頭開始學,或者找一本從零開始學 android 開發看也行.廢話不多說,本人也是剛開始寫,有哪裡我寫不清楚的請多多指點,原型是 寫出來了,後續慢慢更新,先把第一二天上傳上來,看看大家有什麼反應. 第一天 Android 架構與環境搭建 1.1 android 基礎 1.1.1 Android 是什麼?  是一個針對移動設備的作業系統和軟體平臺  基於 Linux內核  由 Google 和開放手機聯盟 OHA 開發的  容許使用 Java語言來開發和管理代碼  Android 開放原始程式碼,Android 遵從 Apache Software License (ASL)2.0 版本 的協定  Android 於 2007 年 11月 5 日開放手機聯盟成立時發佈 注:開放手機聯盟 (OHA)
  • 8. 8 1.1.2 Android 的特點!  應用框架可以重複使用,其元件也可以更換。  Dalvik 虛擬機器針對移動設備進行了優化。  優化的圖形能力支援 2D、3D 圖形(OpenGL ES 1.0)。  集成了基於開源 WebKit 引掣的流覽器。  SQLite 作為結構化資料存儲。  多媒體支援多種音訊、視頻格式。  GSM Telephony (hardware dependent)  支持藍牙 Bluetooth,3G 和 WiFi  支援照相機、GPS、指南針和加速度儀等感測器硬體。  豐富的開發環境。包括類比機、調試工具、記憶體運行檢測,以及為 Eclipse IDE 所 寫的外掛程式。 1.1.3 Android 優缺點! 優點  原始程式碼完全開放。  採用了對有限記憶體、電池和 CPU 優化過的虛擬機器Dalvik,Android 的運行速度比想 象的要 快很多。  運營商(中國移動等)的大力支持,產業鏈條的熱捧。
  • 9. 9 良 好的盈利模式( 3/7 開),產業鏈條的各方:運營商、製造商、獨立軟體生產商都 可 以獲得不錯的利益。將移動終端的評價標準從硬體向軟體轉變,極大的激發了軟 件開 發者的熱情。  Android 的原始程式碼遵循 Apache V2 軟體許可,而不是通常的GPL v2 許可。有 利於 商業開發。  具有強大的 Linux 社區的支援。 缺點  Google 提供了一套 Java 核心包(J2SE5,J2SE 6)的有限子集,尚不承諾遵守 Java 任何 Java 規範,可能會造成 Java陣營的進一步分裂。  現有應用完善度不太夠,需要的開發工作量較大。  模擬器調試手段不十分豐富,速度慢。 1.1.4 Android 架構 Linux Kernel& Android 內核 应用层 应用框架层 (开发调用) 运行机制 (DVM-JVM) 类库层 底层 (基于 linux 内核)
  • 10. 10  Android 基於 Linux 內核,但不是Linux  內核提供系統核心服務,如進程、記憶體、電源管理,網路連接,驅動與安全等。  並不包括全部的Linux。  Linux 內核位於硬體和軟體堆之間的抽象層  核心服務:安全機制、記憶體管理、進程管理、網路、硬體驅動。  內核扮演的是硬體層和系統其它層次之間的一個抽象層的概念。  作業系統的初始化和程式設計介面和標準的 Linux 系統是有所不同的。 Libraries  C/C++庫:被各種 Android 元件使用通過應用程式框架開發者可以使用其功能包 括:  媒體庫:MPEG4 H.264 MP3 JPG PNG .....  WebKit/LibWebCore:Web 流覽引擎  SQLite 關聯式資料庫引擎  2D,3D 圖形庫、引擎 Function Libraries  WebKit  基於開源 WebKit 的流覽器  支持 CSS、Javascript、DOM、Ajax  多媒體框架  基於 PacketVideo OpenCORE平臺  支援標準音頻、視頻  SQLite  輕型資料庫,支援多種平臺
  • 11. 11 Native Servers-Surface  為多種應用提供 2D、3D表面設計 Native Servers-Audio  音訊處理 Hardware Abstraction Libs  硬體虛擬層  User space C/C++ library layer  硬體介面驅動  使 Android 平臺邏輯與硬體介面分離 DVM vs JVM  DVM  Google  Dalvik excutable JVM  Sun  Java bytecode Applications Framework  Activity manager  管理運行應用程式
  • 12. 12  Content Provider  在各應用之間共用資料  Resource Manager  管理非代碼資源  Notification Manager  顯示使用者提示和狀態列  Views System  可擴展顯示,可構建 UI 應用和框架  核心應用,例如連絡人,電子郵件,電話,流覽器,日曆,地圖, ...  充分訪問所有核心應用框架 API  簡化組件的重用  用 Java 編寫應用程式 Applications  JAVA 編寫的應用程式
  • 13. 13 1.2 搭建 android 環境 注:如果想從頭開始學怎麼搭建 android 開發環境的請從 1.2.1 開始 如果想直接學開 發了,請跳過此步驟,到1.2.6 節直接下載穀歌提供的開發工具進行開發. 1.2.1 安裝 Java JDK 並配置 java 環境變數. 下載 JDK,(官方推薦使用 1.6 版本) http://www.oracle.com/technetwork/java/javase/downloads/index.html(官網下載地址) http://download.oracle.com/otn-pub/java/jdk/6u37-b06/jdk-6u37-windows-i586.exe (x86 直接下載地址) http://download.oracle.com/otn-pub/java/jdk/6u37-b06/jdk-6u37-windows-x64.exe (x64 直接下載地址) 安裝 JDK 略過 打開環境變數視窗方法:右鍵【我的電腦】--按一下【屬性】--按一下【高級】--按一下【環境變數】。 在上 方的使用者變數中依次新建如下變數,並分別填入如下路徑: 變數名:JAVA_HOME 變數值:C:Javajdk1.6.0_22(此路徑為 JAVA 安裝路徑) 變數名:PATH
  • 15. 15 1.2.2 下載 eclipse 安裝 ADT 外掛程式 Eclipse 下載地址:http://www.eclipse.org/downloads/(java 和 J2EE 都行) http://build.eclipse.org/technology/phoenix/torrents/juno/eclipse-jee-juno-SR1-win32.zip.torrent (x86 種子地址,如果下載不了請到官方下載) http://build.eclipse.org/technology/phoenix/torrents/juno/eclipse-jee-juno-SR1-win32.zip.torrent X64 的 安裝 ADT 注意: 安裝 ADT 的方法有兩種 一 線上安裝(輸入 Name 和 Location 即可線上安裝,不推薦使用,因為在 線更新灰常慢) Name:Andriod Plugin Location:https://dl-ssl.google.com/android/eclipse/
  • 17. 17 在文件的末尾添加下面一句:74.125.237.1 dl-ssl.google.com (記得右鍵吧 hosts 文件唯讀的勾去了) 二 離線安裝(離線安裝要斷網,不然它會自動聯網安裝的) 離線版 ADT 下載 http://developer.android.com/sdk/index.html
  • 18. 18 離線更新有兩種方法 1 點 local..選擇解壓出來的 ADT 資料夾(好處是解包已在外部完 成了,可以直接更新,不用等待,推薦使用) 2.點 archive 選擇打包的 ADT(好處是不用在外部解包,但是不可 直接更新,要等 eclipse 解包完 ADT.ZIP 才能進行安裝,不推薦使用) 如果推薦使用的方法不行,哪就用其他方法吧! 1.2.3 安裝 android sdk 並更新版本 安裝完 ADT 之後它會提示你重啟 eclipse,重啟完後會提示選擇線上更新 SDK 還是選現有的 SDK(這裡只說明選現有的 SDK) 注意:記得選第二個,默認的是讓你選路徑下載 SDK 的 下載 SDK: http://developer.android.com/sdk/index.html 離線安裝 Sdk
  • 20. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 20 版权归作者所有,禁止任何商业用途,违者必究. 在自己需要的版本上打勾然後按 install (一般開發都用 2.1,穀歌會提示你 95%的開發者都 在用 2.1 之類的話的) 點擊 install 後如下圖,選擇所有 再點 install
  • 21. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 21 版权归作者所有,禁止任何商业用途,违者必究. 更新完後就大功告成了 1.2.4 配置 android 環境變數. 在上方的使用者變數中找到之前創建的【PATH】變數,按兩下它,然後在【變數值】 的最後面添 加上內容 【;E:Androidandroid-sdk-windowstools;E:Androidandroid-sdk-windowsplatform-tools】 其中的分號不能 少,分號在這裡是起到分隔的作用。 配置完成之後,分別點擊【開始】--【運行】--輸入【cmd】--輸入【android -h】-- 按【回車鍵】,若看到以下資訊,則代表配置成功。
  • 22. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 22 版权归作者所有,禁止任何商业用途,违者必究. 1.2.5 配置 ADV 安卓虛擬機器 並寫 hello android 測試
  • 23. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 23 版权归作者所有,禁止任何商业用途,违者必究.
  • 24. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 24 版权归作者所有,禁止任何商业用途,违者必究.
  • 25. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 25 版权归作者所有,禁止任何商业用途,违者必究. 1.2.6 特別贈送:直接下載 Android Developer Tools即可省略 以上 5 個步驟 直接下載 Android Developer Tools 即可使用 官方已 經推出集成 ADT 和最新 SDK(4.2 版本)的 eclipse 了 命名 為 Android Developer Tools 下載地址:http://dl.google.com/android/adt/adt-bundle-windows-x86.zip 或者聯繫作 者獲取 如需安裝其他版本 SDK 請看第 3 步
  • 26. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 26 版权归作者所有,禁止任何商业用途,违者必究. 寫第一個 android 程式
  • 27. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 27 版权归作者所有,禁止任何商业用途,违者必究.
  • 28. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 28 版权归作者所有,禁止任何商业用途,违者必究.
  • 29. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 29 版权归作者所有,禁止任何商业用途,违者必究.
  • 30. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 30 版权归作者所有,禁止任何商业用途,违者必究. 第一個程式就創建好了,如下圖啟動你的程式
  • 31. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 31 版权归作者所有,禁止任何商业用途,违者必究.
  • 32. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 32 版权归作者所有,禁止任何商业用途,违者必究. 如圖,測試成功.第一天的android 課程結束.
  • 33. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 33 版权归作者所有,禁止任何商业用途,违者必究. 第二天 Android 程式設計基礎 2.1 深入瞭解安卓
  • 34. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 34 版权归作者所有,禁止任何商业用途,违者必究. 2.1.1 工程結構解析 src: Java 原始程式碼目錄(只允許有一個包) AndroidMainfest.xml (清單檔,描述應用程式構成、元件、許可權等配置資訊) gen/R.java 資源檔,修改後自動重新生成 Android 庫 assets: 靜態資產檔(用於存放不編譯的資源最大支持 1G) drawable:程式圖示(ico.png) layout: 佈局資料夾 values:程式用到的 string、顏色(string.xml) classes.dex 編譯的 java 二進位碼 Android 平臺上的可執行檔 ActivityLifeCycle.apk Android 安裝包(APK 包) resources.ap_ 資源資訊檔 2.1.2 Android 中 JAVA包功能描述  android.app :提供高層程式模型、提供基本的運行環境  android.content :對設備上的資料進行訪問和發佈的類  android.database :通過內容提供者流覽和操作資料庫  android.graphics :底層的圖形庫  android.location :定位和相關服務的類  android.media :管理多種音訊、視頻的媒體介面  android.net :提供説明網路訪問的類  android.os :提供了系統服務、消息傳輸、 IPC機制  android.opengl :提供 OpenGL 的工具  android.provider :提供類訪問 Android 內容提供者  android.telephony :提供與撥打電話相關的 API 交互  android.view :提供基礎的使用者介面介面框架  android.util :涉及工具性的方法,例如時間日期的操作  android.webkit :預設流覽器操作介面  android.widget :包含各種 UI 元素在應用程式的螢幕中使用
  • 35. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 35 版权归作者所有,禁止任何商业用途,违者必究. 2.1.3 Android 程式核心元件 View: 介面視圖、組織 UI 控制項 Intent: 意圖,支援組件間通信 Activity: 處理介面與 UI 互動 Content Provider: 存儲共用資料 IntentReceiver: 接收資訊及事件處理 Service: 後臺服務(如硬體與驅動的服務) Notification: 消息與通知 2.2 瞭解 Activity 2.2.1 Activity 的概念  活動是最基本的 Android應用程式元件  一個活動通常就是一個單獨的螢幕,它將會顯示由視圖控制群組成的使用者介面,並 對事 件做出回應以啟動其他組件。  當一個新的螢幕打開後,前一個螢幕將會暫停,並保存在歷史堆疊中。使用者可以 返 回到歷史堆疊中的前一個螢幕。當螢幕不再使用時,還可以從歷史堆疊中刪 除。 Android 將會保留從主螢幕到每一個應用的運行螢幕。  所有應用的 Activity 都繼承於 android.app.Activity 類 2.2.2 Activity 的生命週期 void onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy()
  • 36. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 36 版权归作者所有,禁止任何商业用途,违者必究. Activity 有三個狀態:  當 它在螢幕前臺時(位於當前任務堆疊的頂部),它是啟動或運行狀態。它就是響 應 用戶操作的Activity。  當 它失去焦點但仍然對用戶可見時(如右圖),它處於暫停狀態。即在它之上有另 外 一個 Activity。這個 Activity 也許是透明的,或者沒有完全覆蓋全屏,所以被暫 停的 Activity 仍對用戶可見。暫停的 Activity 仍然是存活狀態(它保留著所有的 狀 態和成 員資訊 並保持和 視窗管理 器的連接 ),但系統處於極低記憶體時仍然可 以 殺 死 這個 Activity。  完全被另一個 Activity 覆蓋時則處於停止狀態。它仍然保留所有的狀態和成員信 息。然而對使用者是不可見的,所以它的視窗將被隱藏,如果其它地方需要記憶體, 則 系統經常會殺死這個Activity。 當 Activity 從一種狀態轉變到另一種狀態時,會調用以下保護方法來通知這種變化: 這 七 個 方法定義了 Activity 的 完 整生命週期。實現這些方法可以説明我們監視其中的三個嵌 套生命週期 迴圈:  Activity 的 完 整 生命 週期自 第一 次調用 onCreate()開 始,直至調用 onDestroy()為止。 Activity 在 onCreate()中設置所有“全域”狀態以完成初始化,而在onDestroy()中
  • 37. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 37 版权归作者所有,禁止任何商业用途,违者必究. 釋放所有系統資源。例如,如果 Activity 有一個執行緒在後臺運行從網路上下載資料, 它會在 onCreate()創建執行緒,而在 onDestroy()銷毀執行緒。  Activity 的可視生命週期自 onStart()調用開始直到相應的 onStop()調用結束。在此 期間,使用者可以在螢幕上看到 Activity,儘管它也許並不是位於前臺或者也不與 用 戶進行交互。在這兩個方法之間,我們可以保留用來向使用者顯示這個 Activity 所需 的資源。例如,當使用者不再看見我們顯示的內容時,我們可以在 onStart()中註冊一 個 BroadcastReceiver 來 監 控會影響 UI 的變化,而在 onStop()中 來 注消。 onStart() 和 onStop() 方法可以隨著應用程式是否為使用者可見而被多次調用。  Activity 的前臺生命週期自 onResume()調用起,至相應的 onPause()調用為止。在 此 期間,Activity 位於前臺最上面並與用戶進行交互。Activity 會經常在暫停和恢復 之 間進行狀態轉換——例如當設備轉入休眠狀態或者有新的 Activity 啟動時,將調 用 onPause() 方法。當 Activity 獲得結果或者接收到新的 Intent 時 會調用 onResume() 方 法。關於前臺生命週期迴圈的例子請見 PPT下方備註欄。 (活動通俗來說就活動的可操縱的視窗) 2.3 瞭解 Intent 2.3.1 什麼是意圖: 1.Android 基本的設計理念是鼓勵減少組件間的耦合 2.Intent 提供通用的消息系統,它允許在元件與元件間傳遞 Intent 來執行動作和產生事件。 3.使用 Intent 可以啟動 Android應用的三個核心元件:活動、服務和廣播接收器。 4.Intent 可以劃分成顯式意圖和隱式意圖。 5.顯式意圖:調用 Intent.setComponent()或 Intent.setClass()方法指定了元件名或類物件的 Intent 為顯式意圖,顯式意圖明確指定了 Intent 應該傳遞給哪個組件。 6.隱式意圖:沒有調 用 Intent.setCo mponent()或 Intent.setClass()方 法指定元件名或類物件的 Intent 為隱式意圖。 Android 會根據 intent-filter 中設置的動作(action)、類別(category)、 資料(URI 和資料類 型)找到最合適的元件來處理這個意圖。Intent Filter(篩檢程式)其實 就是用來匹配隱式 Intent 的。想要接收使用 startActivity()方法傳遞的隱式意圖的活動必須 在它們的意圖篩檢 程式中包含"android.intent.category.DEFAULT" (簡單舉個例子,我意圖打劫,所以意圖就是那麼一回事)
  • 38. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 38 版权归作者所有,禁止任何商业用途,违者必究.
  • 39. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 39 版权归作者所有,禁止任何商业用途,违者必究. 2.4 Bundle 類的作用 2.5 回顧 helloandroid 看看安卓程式是怎麼運作的 為什麼到了這裡我們才講 android 應用是怎麼運作的呢?到了這裡我們已經初步瞭解 activity,和 intent,和 Bundle 了! 首先我們知道java 是從Main 進入程式的,那麼android 是怎樣進入程式的呢?細心的朋友或許 已經知道了, AndroidManifest.xml,就是我們程式的入口了.在 2.1 節裡面,有這樣的一幅圖
  • 40. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 40 版权归作者所有,禁止任何商业用途,违者必究. 包名是我們創建目錄的包名,包名下面是版本號, <application>標籤裡註冊了圖示,標題名,還有 activity, @是標準格式,在 R 裡邊會有唯一的 一個 ID,比如 XML 是用來佈局的,那麼在 R 裡則會生成一個對應的 ID, <intent-filter>標籤監聽器,監聽 activity 第一個打開 那麼我們就可以去看看 MainActivity 了
  • 41. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 41 版权归作者所有,禁止任何商业用途,违者必究. 首先我們看看是不是有 activity 的 onCreate 啊!上面說,不論如何都要先執行它,然後傳進來一 個 Bundle 類型的值,然後又調用自身這個類!底層代碼已經幫我們實現好了,我們只需要用就 行了.然後 setContentView 是得到內容視圖,得到那個視圖呢?剛剛我們不是說了嗎,註冊一個 XML 就會有一個 R 值.獲取到 activity_main 這個視圖 那麼我們來看看佈局檔 xml 裡是什麼, 裡面就一個文字方塊,字串是找strings 裡邊的一個字串 所以我們創建 helloandroid 的時候,看到的就是 hello world 了! 在此 我們瞭解完了 android 的運作過程,那麼我們來寫第二個程式吧! 2.6 寫第二個程式 ActivityLifeCycle 按照創建 helloandroid 程式的方法創建一個 activityLifeCycle 的項目 然後點擊包右鍵新建一 個類 為應用添加新的 Activity
  • 42. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 42 版权归作者所有,禁止任何商业用途,违者必究. 這裡說明一下 onCreate 是怎麼弄出來的!
  • 43. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 43 版权归作者所有,禁止任何商业用途,违者必究. 在前面打勾按下 OK 打開新的 Activity,不傳遞參數
  • 44. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 44 版权归作者所有,禁止任何商业用途,违者必究. 上面定義了一個按鈕,findViewById 是根據 ID 找到視圖,R.id.button 那麼你的 XML 是不 是要添加一個按鈕啊?在最新版的 ADT21 中,我們可以輕鬆的佈局了,在 ADT8 中拖動控制項 還 是很麻煩的 學過java 的都會問,為什麼不直接NEW 一個按鈕啊,那麼麻煩,android 這樣是為了降低耦 合度,高內聚,低耦合. 當讓你也可以再 xml 裡自己寫控制項 我們再回過頭來看 button. setOnClickListener(new OnClickListener(){ }) 這裡的 setOnClickListener 是放置一個點擊監聽器裡邊有 new 了一個內部類 為什麼要 這樣寫?當讓你也可以不這樣寫,這樣寫是為了方便,學過 java 的應該都知道吧! 你另外寫一個類,然後再調用它也可以. 實現 OnClickListener 介面自動實現 onClick 方法 這句可以分開來寫 Intent intent=new Intent(); intent.setClass(MainActivity.this, NewActivity.class);
  • 45. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 45 版权归作者所有,禁止任何商业用途,违者必究. startActivity(intent); 剛剛我們學了意圖,意圖是活動之間傳遞資訊的信使,第一個參數是自身的一個活動, 第二個是要轉過去的活動. 2.7 使用篩檢程式: 如何弄出 LoCat 快捷欄裡沒有的話到 Other 裡邊找
  • 46. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 46 版权归作者所有,禁止任何商业用途,违者必究. 相信學過 java 的對輸出語句並不陌生,點擊上面綠色的那個加號就是添加篩檢程式 的,by log level 是日誌類型,如上圖右邊的箭頭,從上到下有所有日誌,捉蟲日誌,資訊日誌,警告 日誌, 錯誤日誌… 設置 syso 篩檢程式 Syso 的記錄日誌我覺得沒那麼亂,容易看出來,單獨顯示出來的,all 是所有資訊 (詳情請參考demo, ActivityLifeCycle)
  • 47. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 47 版权归作者所有,禁止任何商业用途,违者必究. 打開新的 Activity,傳遞參數給它 得到新 Activity 關閉後返回的資料
  • 48. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 48 版权归作者所有,禁止任何商业用途,违者必究.
  • 49. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 49 版权归作者所有,禁止任何商业用途,违者必究. 請求碼的作用 結果碼的作用
  • 50. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 50 版权归作者所有,禁止任何商业用途,违者必究.
  • 51. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 51 版权归作者所有,禁止任何商业用途,违者必究. 第三天.UI 事件處理與佈局管理 3.1 View 與 ViewGroup 3.1.1 Android 介面元素  1、View: 視圖組件  2、Layout: 佈局組件  3、Wigets: UI 元素  4、Menus: 菜單 3.1.2 認識 View 1、所有高級 UI 組件都繼承 View 類而實現的 2、一個 View 在螢幕上佔據一塊矩形區域 3、負責渲染 4、負責處理發生的事件 5、設置是否可見 6、設置是否可以獲得焦點等 3.1.3 認識 ViewGroup 1、ViewGroup 對象是 android.view.ViewGroup 實例 2、 ViewGroup 是View 的容器 3、 負責對添加進 ViewGroup 的 View 進行佈局 4、一個 ViewGroup 可以加入到另一個 ViewGroup 3.1.4 View 與 ViewGroup 的關係
  • 52. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 52 版权归作者所有,禁止任何商业用途,违者必究. 3.2 事件處理機制 控制項事件通過設置其控制項的監聽器來監聽並處理 事件 按鍵按下事件:通過重寫 onKeyDown 方法 按 鍵彈起事件:通過重寫 onKeyUp 方法 觸筆點擊事 件:通過實現 onTouchEvent 方法 其他事件參考相 應 UI 元件的 Demo!! 3.2.1 Toast控制項 在視圖中給使用者顯示的短小的提示消息。 Toast.makeText(this, string, Toast.LENGTH_SHORT).show(); LENGTH_LONG:長時間顯示
  • 53. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 53 版权归作者所有,禁止任何商业用途,违者必究. LENGTH_SHORT:短時間顯示 3.2.2 事件處理 Demo
  • 54. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 54 版权归作者所有,禁止任何商业用途,违者必究. 詳情請參考 DEMO
  • 55. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 55 版权归作者所有,禁止任何商业用途,违者必究. 3.3 布介面佈局方式 LinearLayout(線性佈局) AbsoluteLayout(絕對佈局) RelativeLayout(相對佈局) TableLayout(表格佈局) FrameLayout(框架佈局) 3.3.1 LinearLayout(線性佈局) 是常用的佈局之一 一個元件一行的形式顯示 出來 分垂直(vertical)與水準(horizontal)兩 種。 main.xml: vertical
  • 56. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 56 版权归作者所有,禁止任何商业用途,违者必究. main.xml: horizontal 3.3.2 AbsoluteLayout(絕對佈局) 絕對佈局根據設定好的座標進行定位顯示 AbsoluteLayout 兩個重要的屬性: android:layout_x 元件在螢幕中的 X 座標 android:layout_y 元件在螢幕中的 Y 座標 3.3.3 RelativeLayout(相對佈局) 是按照相對某個元件的位置來進行佈局,也就是說參考某個元件,置於此元件的上、 下、左、右 其中幾個重要的屬性: android:layout_below=“元件 ID”在某組件下麵 android:layout_above=“元件 ID”在某組件上面 android:layout_toRightOf=“ID” 在某組件右邊 android:layout_toLeftOf=“ID” 在某組件左邊
  • 57. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 57 版权归作者所有,禁止任何商业用途,违者必究. RelativeLayout Demo 3.3.4 TableLayout(表格佈局) 是比較常用的佈局,它是按照表格的方式來佈局整個畫面的 TableRow:TableLayout 中需要嵌入行,然後將元件置於 TableRow 中才能顯示成 Table 的形式 幾個重要的屬性: android:layout_weight:比重 TableRow:行 TableLayout Demo
  • 58. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 58 版权归作者所有,禁止任何商业用途,违者必究.
  • 59. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 59 版权归作者所有,禁止任何商业用途,违者必究. 3.3.5 FrameLayout(框架佈局) 是一個比較特殊的佈局 此佈局一般放一個元件,並且這 個元件是靠左上角顯示, 如果加入多個元件,那將會顯 示最上層的一個元件。 FrameLayout Demo 3.3.6 佈局之間的關係 LinearLayout、AbsoluteLayout、RelativeLayout、FrameLayout 均是ViewGroup 的子類
  • 60. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 60 版权归作者所有,禁止任何商业用途,违者必究. TableLayout 則是LinearLayout 子類,如果TableLayout 中的元件沒有放入TableRow 中的話, 那麼就會按 照 LinearLayout 顯示 在 Android 中,佈局是可以相互嵌套的,比如 LinearLayout 中能夠嵌入 TableLayout 一樣 3.4 樣式和主題(style&theme)
  • 61. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 61 版权归作者所有,禁止任何商业用途,违者必究. 第四天.基礎 UI 控制項 4.1 基本控制項介紹 1、Button 按鈕  研究 ButtonDemo 2、TextView 文字方塊  研究 TextViewDemo
  • 62. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 62 版权归作者所有,禁止任何商业用途,违者必究. 3、EditText 文本編輯方塊  研究 EditTextDemo 4、CheckBox 多項選擇 每個多選框都是獨立的,可以通過反覆運算所有多選框,然後根 據其狀態是否被選中再獲取其值。  CheckBox.setChecked(true);//設置成選中狀態。  CheckBox.getText();//獲取多選框的值  調 用 setOnCheckedChangeListener() 方 法 , 處 理 多 選 框 被 選 擇 事 件 , 把 CompoundButton.OnCheckedChangeListener 實例作為參數傳入  研究 CheckBoxDemo
  • 63. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 63 版权归作者所有,禁止任何商业用途,违者必究. 5、RadioButton 單項選擇  研究 RadioButtonDemo 6、Spinner 下拉清單  Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());獲取下拉式清單方塊的值  調 用 setOnItemSelectedListener() 方 法 , 處 理 下 拉 列 表 框 被 選 擇 事 件 , 把 AdapterView.OnItemSelectedListener 實例作為參數傳入 下拉式清單方塊—Adapter  很多時候顯示在下拉式清單方塊的值並不是希望得到的值,如果要做一個連絡人下 拉列 表框,清單方塊列出的是連絡人的姓名,因為姓名有可能相同,所以我們希 望得到的 值應該為該連絡人的 id,要實現這種需求我們需要自訂 Adapter,當 然自訂 Adapter 需要我們編寫一小段代碼,如果我們不想編寫 Adapter,又能實現 我們的需 求 , 那 是 最 好 不 過 的 了 。 通 過 觀 察 ArrayAdapter 中 getView(int position, View convertView, ViewGroup parent)的內部代碼發現,如果為ArrayAdapter 指定的實際泛
  • 64. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 64 版权归作者所有,禁止任何商业用途,违者必究. 型參數類型沒有實現 CharSequence(字串)介面,將會調用該類型物件的 toString() 向下拉式清單方塊輸出顯示值。利用這個特點我們可以重寫 javaBean 的toString()向 下拉 清單方塊提供顯示值。 下拉式清單方塊--自訂選項介面樣式  Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());獲取下拉式清單方塊的值  調 用 setOnItemSelectedListener() 方 法 , 處 理 下 拉 列 表 框 被 選 擇 事 件 , 把 AdapterView.OnItemSelectedListener 實例作為參數傳入 7、TimePicker/DatePicker 時間選擇器  研究 TimeDatePicker 8、ScrollView 滾動視圖  研究 ScrollViewDemo
  • 65. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 65 版权归作者所有,禁止任何商业用途,违者必究. 9、ImageView 圖片視圖  研究 ImageViewDemo 10、ImageButton 圖片按鈕  研究 ImageButtonDemo
  • 66. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 66 版权归作者所有,禁止任何商业用途,违者必究. 11、GridView 網格視圖  研究 GridViewImageDemo 4.2 認識 Widget 元件
  • 67. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 67 版权归作者所有,禁止任何商业用途,违者必究. 1、介面中展示的各個小元件 2、有獨立的事件處理能力 3、所有 Wiget 組件都是繼承 View 而來 4.3 Widget 組件類繼承關係 第五天.高級 UI 控制項 高級控制項介紹 12、 ProgressBar 進度條 創建進度條 在佈局 xml 檔中添加進度條代碼: <ProgressBar android:layout_width="fill_parent"android:layout_height="20px" style="?android:attr/progressBarStyleHorizontal" android:id="@+id/downloadbar"/> 在代碼中操作進度條: ProgressBar.setMax(100);//設置總長度為 100 ProgressBar.setProgress(0);//設置已經開啟長 度為 0,假設設置為50,進度條將進行到一半
  • 68. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 68 版权归作者所有,禁止任何商业用途,违者必究.  研究 ProgressBarDemo 13、ProgressDialog 進度條對話方 塊 打開對話方塊 newAlertDialog.Builder(this) .setTitle(“lxt008") .setMessage("流覽http://www.lxt008.com") .setPositiveButton("打開連結", newDialogInterface.OnClickListener(){ public void onClick(DialogInterface dialoginterface, int i){ Uri uri = Uri.parse("http://www.lxt008.com/"); Intent intent =newIntent(Intent.ACTION_VIEW, uri); startActivity(intent); } } ).show();  研究 DialogDemo
  • 69. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 69 版权归作者所有,禁止任何商业用途,违者必究. 帶進度條的對話方塊  研究 ProgressDialogDemo 進度對話方塊ProgressDialog
  • 70. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 70 版权归作者所有,禁止任何商业用途,违者必究.  使用代碼 ProgressDialog.show(ProgressDialogActivity.this, "請稍等", "資料正在載入 中...", true);創建並顯示一個進度對話方塊。  調用setProgressStyle()方法設置進度對話方塊風格。有兩種 風格: ProgressDialog.STYLE_SPINNER 旋體進度條風格 (為默 認風格) ProgressDialog.STYLE_HORIZONTAL 橫向進度條風格 14、SeekBar 拖動條  SeekBar.getProgress()獲取拖動條當前值  調 用 setOnSeekBarChangeListener() 方 法 處 理 拖 動 條 值 變 化 事 件 , 把 SeekBar.OnSeekBarChangeListener 實 例作為參數傳入  研究 SeekBarDemo
  • 71. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 71 版权归作者所有,禁止任何商业用途,违者必究. 15、ImageSwitcher 圖片切換  研究 ImageSwitcherDemo 16、Gallery 圖片切換  研究 GalleryDemo
  • 72. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 72 版权归作者所有,禁止任何商业用途,违者必究. 17、TabHost 標籤組件  研究 TabHostDemo 18、Menu 菜單  重寫Activity的onCreateOptionsMenu(Menu menu)方法,該方法用於創建選項功能表, 在 用 戶 按 下 手 機 的 “ Menu” 按 鈕 時 就 會 顯 示 創 建 好 的 菜 單 , 在 onCreateOptionsMenu(Menu menu)方法內部可以調用 Menu.add()方法實現功能表的 添 加。  重寫 Activity 的 onMenuItemSelected()方法,該方法用於處理功能表被選擇事件
  • 73. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 73 版权归作者所有,禁止任何商业用途,违者必究. 第六天.Android Service 6.1 Service 概述 6.1.1 Service 概念及用途  服務是運行在後臺的一段代碼。  不是進程,也不是執行緒。  可 以 運行在它自己的進程,也可以運行在其他應用程式進程的上下文(context) 裡 面 , 這取決於自身 的需要。  Android 中 的 服務,它與 Activity 不 同 ,它是不能與用戶交互的,不能自己啟動的, 運行在後臺的 程式。  媒體播放機的服務,當使用者退出媒體選擇使用者介面,仍然希望音樂依然可以繼續播 放,這 就是由服務(service)來保證當使用者介面關閉時音樂繼續播放的。  比如當我們一個應用的資料是通過網路獲取的,不同時間的資料是不同的,這時候我 們可以用 Service 在後臺定時更新,而不用每打開應用的時候在去獲取。 6.2 Service 生命週期  onCreate()  在服務被創建時調用,該方法只會被調用一次,無論調用多少次 startService() 或 bindService()方法,服務也只被創建一次。  onStart()  只有採用 Context.startService()方法啟動服務時才會回檔該方法。該方法在服 務開始運行時被調用。多次調用 startService()方法儘管不會多次創建服務, 但 onStart() 方法會被多次調用。  onDestroy()  服務被終止時調用。  onBind()  只有採用 Context.bindService() 方法啟動服務時才會回檔該方法。該方法在調 用者與服 務綁 定時 被調用 ,當 調用 者與 服務 已經綁 定, 多次 調 用 Context.bindService()方法並不會導致該方法被多次調用。  onUnbind()  只有採用 Context.bindService() 方法啟動服務時才會回檔該方法。該方法在調 用者與服務解除綁定時被調用。  startService 後,即使調用 startService 的進程結束了 Service仍然還存在,直到有 進 程 調 用 stopService, 或 者 Service 自 己自殺(stopSelf()) 。  bindService 後,Service 就和調用 bindService 的進程同生共死了,也就是說當調用 bindService 的進程死了,那麼它 bind 的 Service 也要跟著被結束,當然期間也可以 調用 unbindservice 讓 Service 結束。
  • 74. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 74 版权归作者所有,禁止任何商业用途,违者必究.  兩種方式混合使用時,比如說你 startService 了,我 bindService 了,那麼只有你 stopService 了而且我也 unbindservice 了,這個Service 才會被結束。 6.3 啟動與停止 Service 6.3.1 Service 開發步驟 第一步:繼承 Service 類 public class MyService extends Service { } 第二步:在 AndroidManifest.xml 檔中的<application>節點裡對 服務進行配 置: <service android:name=".MyService" /> 服務不能自己運行,使 用 startService()方法啟用服務,調用者與 服務之間沒有關連,即使調用者退出了,服務仍然運行。使用 bindService() 方法啟用服務,調用者與服務綁定在了一起,調用者 一旦退出,服務也就終 止,大有“不求同時生,必須同時死”的特點。 如果打算採用 Context.startService()方法啟動服務,在服務未被創建時,系 統會先調用服務的 onCreate()方法,接著調用 onStart()方法。如果調用 startService()方法前服務已經被創建,多次調用 startService()方法並不會 導致多次創建服務,但會導致多次調用 onStart()方法。採用 startService()方法 啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調 用 onDestroy()方法。 如果打算採用 Context.bindService()方 法 啟 動 服務,在服務未被創建時,系統 會先調用服務的 onCreate()方法,接著調用 onBind()方法。這個時候調用者和 服務綁定在一起,調用者退出了,系統就會先調用服務的 onUnbind()方法,接 著調用 onDestroy()方法。如果調用 bindService()方法前服務已經被綁定,多 次調用 bindService()方法並不會導致多次創建服務及綁定(也就是說 onCreate()和onBind()方法並不會被多次調用)。如果調用者希望與正在綁定的 服務解除綁定,可以調用unbindService()方法,調用該方法也會導致系統調用 服務的 onUnbind()-->onDestroy()方法。
  • 75. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 75 版权归作者所有,禁止任何商业用途,违者必究. 6.3.2 採用 startService()啟動服務 6.3.3 採用 bindService()啟動服務
  • 76. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 76 版权归作者所有,禁止任何商业用途,违者必究. 6.3.4 Service 服務演示  1.新建一個 Android 工程 ServiceDemo  2.修改 main.xml 代碼,增加二個按鈕  3.新建一個 Service,命名為MyService.java  4.新建 ServiceDemo.java  5.配置 AndroidManifest.xml  6.執行上述工程, 用 Logcat 查看日誌  7.按 HOME 鍵進入 Settings(設置)Applications(應用)Running Services(正在運 行的服務) main.xml
  • 77. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 77 版权归作者所有,禁止任何商业用途,违者必究. MyService.java
  • 78. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 78 版权归作者所有,禁止任何商业用途,违者必究. ServiceDemo.java
  • 79. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 79 版权归作者所有,禁止任何商业用途,违者必究. AndroidManifest.xml
  • 80. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 80 版权归作者所有,禁止任何商业用途,违者必究. 6.4 Notification 通知 6.4.1 Android 中的通知(Notification) 6.5 案例分析  參考案例:NotificationDemo
  • 81. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 81 版权归作者所有,禁止任何商业用途,违者必究. 第七天.SharedPreferences 與文件 7.1 SharedPreferences 7.1.1 資料存儲方式  SharedPreferences  存儲到檔  SQLite 資料庫  存儲到網路  內容提供者(Contentprovider) 7.1.2 SharedPreferences  如何保存軟體配置參數:  Window: 採用 ini 檔進行  j2se 應用: 採用 properties 屬性檔  Android 平臺提供一個 SharedPreferences類,它是一個羽量級的存儲類, 適合用於保存軟體配置參數。  使用 SharedPreferences 保存資料,其背後是用 xml 檔存放資料,檔存 放在 /data/data/<package name>/shared_prefs 目錄下
  • 82. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 82 版权归作者所有,禁止任何商业用途,违者必究. 7.1.3 SharedPreferences 存儲資料  SharedPreferences sharedPreferences = getSharedPreferences("lxt008", Context.MODE_PRIVATE); Editor editor= sharedPreferences.edit();//獲取編輯器 editor.putString("name","lxt"); editor.putInt("age", 35); editor.commit();//提交修改 生成的 lxt008.xml 檔內容如下: <?xml version=“1.0” encoding=“utf-8” standalone=“yes”?> <map> <stringname="name">lxt</string> <int name="age" value=“30"/> </map>  getSharedPreferences(name,mode)方法  參數 1:指定該檔案名稱,名稱不用帶尾碼。  參數 2:指定檔的操作模式,共有四種操作模式。  Context.MODE_PRIVATE:為預設操作模式,代表該檔是私有數 據, 只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件 的 內 容 ,如果想把新寫入的內容追加到原文件中。可以使用 Context.MODE_APPEND  Context.MODE_APPEND:模式會檢查檔是否存在,存在就往文 件 追加內容,否則就創建新檔。  Context.MODE_WORLD_READABLE 和 Context.MODE_WORLD_WRITEABLE 用來控制其他應用是否有 許可權讀寫該文件。  MODE_W ORL D_ RE ADABL E: 表示當前檔可以被其他應用讀 取; MODE_WORLD_WRITEABLE:表示當前檔可以被其他應 用寫 入。  getPreferences(mode)方 法 操 作 SharedPreferences, 這 個 方 法 默 認使用當前類不帶包 名的類名作為檔的名稱。  android 有一套自己的安全模型,當應用程式(.apk)在安裝時系統就會分配給他一個 userid,當該應用要去訪問其他資源比如檔的時候,就需要 userid匹配。  預設情況下,應用創建的檔/sharedpreferences/資料庫都應該是私有的(位於 /data/data/包 名 ), 其 他 程 式無法訪問。  除 非 在 創 建 時 指 定 了Context.MODE_WORLD_READABLE 或 者 Context.MODE_WORLD_WRITEABLE ,只有這樣其他程式才能正確訪問。
  • 83. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 83 版权归作者所有,禁止任何商业用途,违者必究. 7.1.4 訪問 SharedPreferences 資料  訪問 SharedPreferences中的資料代碼如下: SharedPreferences sharedPreferences = getSharedPreferences("lxt008", Context.MODE_PRIVATE); //getString()第二個參數為缺省值,如果 preference 中不存在該key,將返回缺省值 String name = sharedPreferences.getString("name", ""); int age = sharedPreferences.getInt("age",1); 7.2 不同應用共用資料 7.2.1 訪問其他應用 SharedPreferences 資料  訪 問 其 他 應 用 Preference , 前 提 條 件 是 : 該 preference 創 建 時 指 定 了 Context.MODE_WORLD_READABLE 或 者 Context.MODE_WORLD_WRITEABLE。  getSharedPreferences(“lxt008", Context.MODE_WORLD_READABLE);  其 他應用要訪問上面應用 的 preference,首先需要創建上面應用的 Context, 然後通過 Context 訪問 preference,訪問 preference 時會在應用所在包下的 shared_prefs 目錄找到 preference : Context otherAppsContext = createPackageContext( “ com.lxt008", Context.CONTEXT_IGNORE_SECURITY); SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences(“lxt008", Context.MODE_WORLD_READABLE); String name = sharedPreferences.getString("name", ""); int age = sharedPreferences.getInt("age",0); Shared Preferences 案例  參考:SharedPreferencesMidiPlayer 結果驗證  切換到 DDMS 視圖  選擇 File Explorer 標籤  /data/data/你的專案目錄/shared_prefs
  • 84. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 84 版权归作者所有,禁止任何商业用途,违者必究. 7.3 Android 檔操作 7.3.1 檔存儲  檔可以存儲比使用引用更大數量的資料  Android 提供方法來讀、寫檔  只有本地檔可以被訪問  優點:可以存儲大容量的資料  缺點:檔更新或是格式改變可能會導致巨大的程式設計工作 7.3.2 讀檔操作  Context.openFileInput(String name)  打開一個與應用程式聯繫的私有檔輸入流  當文件不存在時拋出 FileNotFoundException  FileInputStream in = this.openFileInput("test.txt");//打開文件"test.txt"  ……  in.close();//關閉輸入流 7.3.3 寫檔操作  Context.openFileOutput(String name,int mode)  開啟一個與應用程式聯繫的私有檔輸出流  當文件不存在時該文件將被創建  檔輸出流可以在添加模式中打開,這意味新的資料將被添加到檔的末尾  FileOutputStream out = this.openFileOutput("test2.txt",MODE_APPEND);  //打開文件"test2.txt"進行寫操作、使用 MODE_APPEND 在添加模式中打開檔  ……  out.close();//關閉輸出流 7.3.4 讀取靜態檔  要 打 開 打 包 在 程 序 中 的 靜 態 文 件 , 使 用 Resources.openRawResource(R.raw.mydatafile)  該檔必須放在資料夾res/raw/中  InputStreamin =this.getResources().openRawResource(R.raw.my);  … //獲得 Context 資源  in.close();//關閉輸入流
  • 85. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 85 版权归作者所有,禁止任何商业用途,违者必究. 檔操作案例  參考:FileMidiPlayer 7.3.5 使用檔進行資料存儲 首先給大家介紹使用檔如何對資料進行存儲,Activity 提供了openFileOutput()方法可以用 於把資料輸出到檔中,具體的實現過程與在 J2SE 環境中保存資料到檔中是一樣的。 public class FileActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { ... FileOutputStream outStream = this.openFileOutput(“lxt008.txt", Context.MODE_PRIVATE); outStream.write(“lxt008".getBytes()); outStream.close(); } } openFileOutput()方法的第一參數用於指定檔案名稱,不能包含路徑分隔符號 “/” ,如果檔 不存在,Android 會自動創建它。創建的檔保存在/data/data/<package name>/files 目錄, 如 : /data/data/com.lxt008/files/lxt008.txt , 通 過 點 擊 Eclipse 菜 單 “ Window”-“Show View”-“Other”,在對話視窗中展開 android 資料夾,選擇下面的 File Explorer 視圖,然後在 File Explorer 視圖中展開/data/data/<package name>/files 目錄就可以看到該檔。 openFileOutput() 方 法 的 第 二 參 數 用 於 指 定 操 作 模 式 , 有 四 種 模 式 , 分 別 為 : Context.MODE_PRIVATE = 0 Context.MODE_APPEND = 32768 Context.MODE_WORLD_READABLE = 1 Context.MODE_WORLD_WRITEABLE = 2 7.3.6 讀取檔內容 如果要打開存放在/data/data/<package name>/files 目錄應用私有的檔,可以使用 Activity 提供 openFileInput()方法。 FileInputStream inStream = this.getContext().openFileInput(“lxt008.txt"); Log.i("FileTest", readInStream(inStream)); readInStream()的方法請看本 頁下面備註。 或者直接使用檔的絕對路徑: File file = new File("/data/data/com.lxt008/files/lxt008.txt"); FileInputStream inStream = new FileInputStream(file); Log.i("FileTest", readInStream(inStream)); 注意:上面檔路徑中的“com.lxt008”為應用所在包,應替換為你自己應用使用的包。
  • 86. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 86 版权归作者所有,禁止任何商业用途,违者必究. 對於私有文件只能被創建該文件的應用訪問,如果希望檔能被其他應用讀和寫,可以在創 建 文 件 時 , 指 定 Context.MODE_WORLD_READABLE 和 Context.MODE_WORLD_WRITEABLE 許可權。 Activity 還提供了 getCacheDir()和 getFilesDir()方法: getCacheDir()方法用於獲取/data/data/<package name>/cache 目錄 getFilesDir()方法用於獲取/data/data/<package name>/files 目錄 7.4 SDCard 文件存取 7.4.1 把文件存放在 SDCard 使用 Activity 的 openFileOutput()方法保存檔,檔是存放在手機空間上,一般手機的存儲 空 間不是很大,存放些小檔還行,如果要存放像視頻這樣的大檔,是不可行的。對於像 視頻這樣 的大檔,我們可以把它存放在 SDCard。 SDCard 是幹什麼的?你可以把它看作 是移動硬 碟或 U 盤。 在模擬器中使用 SDCard,你需要先創建一張 SDCard 卡(當然不是真的 SDCard,只是鏡像 檔)。創建 SDCard 可以在 Eclipse 創建模擬器 時隨同創 建,也可 以使用 DOS 命令進行創 建,如下: 在 Dos 視窗中進入 android SDK 安裝路徑的 tools 目錄,輸入以下命令創建一張容量為 2G 的 SDCard,檔尾碼可以隨便取,建議使用.img: mksdcard 2048MD:AndroidToolsdcard.img 在程式中訪問 SDCard,你需要申請訪問 SDCard的許可權。 在 AndroidManifest.xml 中加入訪問 SDCard 的許可權如下: <!-- 在 SDCard 中創建與刪除檔許可權--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往 SDCard 寫入資料許可權--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 要往 SDCard 存放檔,程式必須先判斷手機是否裝有 SDCard,並且可以進行讀寫。 注意:訪問 SDCard 必須在 AndroidManifest.xml 中加入訪問 SDCard 的許可權 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard 目錄 File saveFile = new File(sdCardDir, “lxt008.txt”); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write(“lxt008".getBytes()); outStream.close(); } Environment.getExternalStorageState()方法用於獲取 SDCard的狀態,如果手機裝有SDCard, 並且可以進行讀寫,那麼方法返回的狀態等於 Environment.MEDIA_MOUNTED。 Environment.getExternalStorageDirectory()方法用於獲取 SDCard 的目錄,當然要獲取SDCard 的目錄,你也可以這樣寫: File sdCardDir = new File("/sdcard"); //獲取SDCard 目錄 File saveFile = new File(sdCardDir, “lxt008.txt");
  • 87. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 87 版权归作者所有,禁止任何商业用途,违者必究. //上面兩句代碼可以合成一句: File saveFile = new File("/sdcard/lxt008.txt"); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write(“lxt008".getBytes()); outStream.close();
  • 88. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 88 版权归作者所有,禁止任何商业用途,违者必究.
  • 89. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 89 版权归作者所有,禁止任何商业用途,违者必究. 第八天.SQLite 資料庫技術 8.1 SQLite介紹 8.1.1 資料庫存儲  在某些情況下,檔不是有效的  多執行緒資料訪問  需要交易處理  如果應用程式處理可能變化的複雜資料結構  資料庫對於創建它們的包套件是私有的 8.1.2 SQLite 介紹  SQLite 是一個羽量級的資料庫,體積大小只用幾千位元組  一些 SQL 的指令只是部分支援,例如: ALTER、TABLE  廣泛應用在嵌入式移動設備之上。  參閱 http://www.sqlite.org 獲取更多資訊 8.2 創建/打開/刪除資料庫 8.2.1 創建資料庫  Context.createDatabase( String name, // int version, // int mode, // CursorFactory factory // )  創建一個新的資料庫並返回一個 SQLiteDatabase 物件  資料庫不能被創建,則拋出 FileNotFoundException 異常
  • 90. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 90 版权归作者所有,禁止任何商业用途,违者必究. 8.2.2 其他創建資料庫的方法 SQLiteDatabase mydataBase=SQLiteDatabase.crrrreeeeaaaatttteeee((((nnnneeeewwww CCCCuuuurrrrssssoooorrrrFFFFaaaaccccttttoooorrrryyyy(((()))){{{{ //創建一個資料庫 //工 廠 類,一個可選工廠類,當查詢時調用來產生實體一個游標 public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) { return null; } }); SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db", MOOOODDDDEEEE__PPPPRRRRIIIIVVVVAAAATTTTEEEE,,,, nnnneeeewwww CCCCuuuurrrrssssoooorrrrFFFFaaaaccccttttoooorrrryyyy(((()))){{{{ //創建新的資料庫,名稱 myDatabase,模式MODE_PRIVATE,游標工廠 //工 廠 類,一個可選工廠類,當查詢時調用來產生實體一個游標 public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) { return null; } }); 8.2.3 刪除資料庫  Context.deleteDatabase(String name)  刪除指定名稱的資料庫  假如資料庫成功刪除則返回 true,失敗則為 false
  • 91. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 91 版权归作者所有,禁止任何商业用途,违者必究. 8.2.4 打開資料庫  Context.openDatabase(String file,CursorFactory factory)  打開一個存在的資料庫並返回一個 SQLiteDatabase 物件  如果資料庫不存在則拋出 FileNotFoundException 異常  如創建一個名為:myDataBase 的資料庫,尾碼為.db  SQLiteDatabase my_DataBase= this.openOrCreateDatabase( "myDateBase.db", MODE_PRIVATE, null);  my_DataBase.close();//不要忘記關閉資料庫 8.2.5 非查詢 SQL 指令  SQLiteDatabase.execSQL(String sql)  可以用來執行非查詢 SQL 指令,這些指令沒有結果, 包括: CREATE TABLE / DROP TABLE / INSERT 等等。 8.3 創建/刪除表 8.3.1 SQLite 基礎案例 private SQLiteDatabase mSQLiteDatabase=null; // 打開已經存在的資料庫 mSQLiteDatabase = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null); /* 在資料庫 mSQLiteDatabase 中創建一個表 */ mSQLiteDatabase.execSQL(CREATE_TABLE); /* 刪除資料庫 */ this.deleteDatabase(DATABASE_NAME); /* 退出時,不要忘記關閉 */ mSQLiteDatabase.close(); /* 刪除一個表 */ mSQLiteDatabase.execSQL("DROPTABLE" + TABLE_NAME); /* 更新一條資料 */ ContentValues cv = newContentValues(); cv.put(TABLE_NUM, miCount); cv.put(TABLE_DATA, "修改後的資料" +miCount); mSQLiteDatabase.update(TABLE_NAME, cv, TABLE_NUM + "=" + Integer.toString(miCount - 1),null);
  • 92. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 92 版权归作者所有,禁止任何商业用途,违者必究. UpdataAdapter(); //更新介面 /* 向表中添加一條數據 */ ContentValues cv = newContentValues(); cv.put(TABLE_NUM, miCount); cv.put(TABLE_DATA, "測試資料庫資料" + miCount); mSQLiteDatabase.insert(TABLE_NAME, null, cv); miCount++; UpdataAdapter(); //更新介面 /* 從表中刪除指定的一條資料 */ mSQLiteDatabase.execSQL("DELETE FROM " + TABLE_NAME + " WHERE _id=" +Integer.toString(miCount)); miCount--; if (miCount < 0){ miCount = 0; } UpdataAdapter(); //更新介面 8.3.2 SQLite 基礎案例:更新視圖顯示 /* 更新視圖顯示 */ public void UpdataAdapter(){ // 獲取資料庫 Phones 的Cursor Cursor cur = mSQLiteDatabase.query(TABLE_NAME, newString[] { TABLE_ID, TABLE_NUM, TABLE_DATA }, null, null, null, null, null); miCount = cur.getCount(); if (cur != null && cur.getCount() >=0) { // ListAdapter 是 ListView和後臺資料的橋樑 ListAdapter adapter = newSimpleCursorAdapter(this, // 定義 List 中每一行的顯示範本 // 表示每一行包含兩個資料項目 android.R.layout.simple_list_item_2, // 資料庫的 Cursor物件 cur, // 從資料庫的 TABLE_NUM 和 TABLE_DATA 兩列中取資料 newString[] { TABLE_NUM, TABLE_DATA }, // 與 NAME 和 NUMBER 對應的 Views new int[] { android.R.id.text1, android.R.id.text2 }); /* 將 adapter 添加到 m_ListView中 */
  • 93. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 93 版权归作者所有,禁止任何商业用途,违者必究. m_ListView.setAdapter(adapter); } } ** 研究案例DatabaseDemo1 8.4 CRUD 操作 8.4.1 查詢 SQL 指令-游標Cursors  Android 使用游標(Cursors)來導航流覽查詢結果  游標(Cursors)被 android.database.Cursor 物件來描述  一 個 游 標(Cursors)是 一 個 簡 單 的 指標,它從查詢結果的一個元組跳到下一個元組 (或 前一個或第一 個……)  游標(Cursors)在它定位位置的那一刻返回元組資料 //為創建 Cursor(游標),必須執行查詢,要麼通過 SQL 使用rawQuery()方法 //或是更精心設計的方法,像query()方法 Cursor cur=my_DataBase.rawQuery("SELECT * FORM test", null); if(cur!=null){//游 標不為空 //返回給定名稱的列的基於 0 開始的index,如果該屬性列不存在則返回-1 //通過它們的 index來檢索屬性值 int numColumn=cur.getColumnIndex("someNumber"); if(cur.moveToFirst()){ //cur.moveToFirst()讓 游 標 指 向第一行,如果游標指向第一行,則返回 true do { int num=cur.getInt(numColumn);//獲 得 當 前 行該屬性的值 /*Cursor提供了不同的方法來回索不同的資料類型 例如 getInt(int index)/getString(int index)等等*/ /*做一些事情*/ } while (cur.moveToNext()); /*游標移動到下一行,如果游標已經通過了結果集中的最後, 即沒有行可以移動時,則返 回 false*/ //其他可能移動的是 previous() 和 first()方法 } } 5.5 交易處理 5.5.1 使用事務操作 SQLite 資料庫 使 用 SQLiteDatabase 的 beginTransaction() 方 法 可 以 開 啟 一 個 事 務 , 程 序 執 行 到 endTransaction() 方法時會檢查事務的標誌是否為成功,如果為成功則提交事務,否則回滾
  • 94. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 94 版权归作者所有,禁止任何商业用途,违者必究. 事 務。 當 應 用需 要 提 交事 務 , 必須 在 程 序執 行 到 endTransaction() 方法 之 前 使 用 setTransactionSuccessful() 方法設置事務的標誌為成功,如果不調用setTransactionSuccessful() 方法,預設 會回滾事務。使用例子如下: SQLiteDatabase db = ....; db.beginTransaction();//開始事務 try { db.execSQL("insert into person(name, age) values(?,?)", new Object[]{“lxt008", 4}); db.execSQL("update person set name=? where personid=?", new Object[]{“lxt008", 1}); db.setTransactionSuccessful();//調用此方法會在執行到 endTransaction() 時提交當前事 務,如果不調用此方法會回滾事務 } finally { db.endTransaction();//由事務的標誌決定是提交事務,還是回滾事務 } db.close(); 上面兩條 SQL 語句在同一個事務中執行。 其他  資料庫輔助類  研究案例 DatabaseDemo2  資料庫小工具  Sqlitebrowser 可以簡單管理 Sqlite 資料庫 第九天.ContentProvider 與 BroadcastReceiver 9.1 ContentProvider 9.1.1 使用 ContentProvider 共用資料 當應用繼承 ContentProvider 類,並重寫該類用於提供資料和存儲資料的方法,就可以向其 他應用共用其資料。雖然使用其他方法也可以對外共用資料,但資料訪問方式會因數據存儲 的 方式而不同, 如:採用檔 方式對外共 用資料, 需要進行檔 操作讀寫資 料;采 用 sharedpreferences 共用資料,需要使用 sharedpreferences API 讀寫資料。而使用 ContentProvider 共用資料的好處是統一了資料訪問方式。 當應用需要通過 ContentProvider 對外共用資料時,第一步需要繼承 ContentProvider 並重寫 下面方法: public class PersonContentProvider extends ContentProvider{ public boolean onCreate() public Uri insert(Uri uri, ContentValues values)
  • 95. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 95 版权归作者所有,禁止任何商业用途,违者必究. public int delete(Uri uri, String selection, String[] selectionArgs) public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) public String getType(Uri uri)} 第二步需要在 AndroidManifest.xml 使用<provider>對該 ContentProvider 進行配置,為了能讓 其他應用找到該 ContentProvider , ContentProvider 採用了 authorities(主機名稱/功能變數 名稱)對它 進行唯一標識,你可以把 ContentProvider 看作是一個網站(想想,網站也是提 供資料者), authorities 就是他的功能變數名稱: <manifest .... > <application android:icon="@drawable/icon" android:label="@string/app_name"> <provider android:name=".PersonContentProvider" android:authorities=“com.lxt008.provider.personprovider"/> </application> </manifest> 注意:一旦應用繼承了 ContentProvider 類,後面我們就會把這個應用稱為 ContentProvider (內容提供者)。 9.1.2 Uri 介紹 Uri 代表了要操作的資料,Uri 主要包含了兩部分資訊:1》需要操作的ContentProvider ,2》 對 ContentProvider 中的什麼資料進行操作,一個 Uri 由以下幾部分組成: ContentProvider(內容提供者)的 scheme 已經由 Android 所規定, scheme 為:content:// 主機名稱(或叫Authority)用於唯一標識這個ContentProvider,外部調用者可以根據這個標 識 來找到它。 路徑(path)可以用來表示我們要操作的資料,路徑的構建應根據業務而 定,如下: 要操作 person 表中 id 為 10 的記錄,可以構建這樣的路徑:/person/10 要操作 person 表中 id 為 10 的記錄的 name 欄位, person/10/name 要操作 person 表中的所有記錄,可以構建這樣的路徑:/person 要操 作 xxx 表中的記錄,可以構建這樣的路徑:/xxx 當然要操作的資料不一定來自資料庫,也可以是檔等他存儲方式,如下: 要操作 xml 檔中 person 節點下的 name 節點,可以構建這樣的路徑:/person/name 如果要把一個字串轉 換成 Uri,可以使用 Uri 類中的 parse()方法,如下: Uri uri = Uri.parse("content://com.lxt008.provider.personprovider/person")
  • 96. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 96 版权归作者所有,禁止任何商业用途,违者必究. 9.1.3 UriMatcher 類使用介紹 因為 Uri 代表了要操作的資料,所以我們很經常需要解析 Uri,並從 Uri 中獲取資料。Android 系統提供了兩個用於操作 Uri 的工具類,分別為 UriMatcher 和 ContentUris 。掌握它們的使 用,會便於我們的開發工作。 UriMatcher 類用於匹配 Uri,它的用法如下: 首先第一 步把你需要匹配 Uri 路徑全部給註冊上,如下: //常量UriMatcher.NO_MATCH 表示不匹配任何路徑的返回碼 UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH); //如果 match()方法匹配content://com.lxt008.provider.personprovider/person 路徑,返回匹配碼 為 1 sMatcher.addURI(“cn.itcast.provider.personprovider”, “person”, 1);//添加需要匹配uri,如果匹 配就會返回 匹配碼 //如果 match()方法匹配 content://com.lxt008.provider.personprovider/person/230 路徑,返回匹 配碼為 2 sMatcher.addURI(“com.lxt008.provider.personprovider”, “person/#”,2);//#號為萬用字元 switch(sMatcher.match(Uri.parse("content://com.lxt008.provider.personprovider/person/10"))) { case 1 break; case 2 break; default://不匹配 break; } 註冊完需要匹配的 Uri 後,就可以使用 sMatcher.match(uri)方法對輸入的 Uri 進行匹配,如果 匹 配就返 回匹 配碼 , 匹配 碼是 調 用 addURI() 方 法傳入 的第 三 個參 數, 假 設匹 配 content://com.lxt008.provider.personprovider/person 路徑,返回的匹配碼為1 ContentUris 類用於獲取 Uri 路徑後面的 ID 部分,它有兩個比較實用的方法: withAppendedId(uri, id)用於為路徑加上ID 部分: Uri uri =Uri.parse("content://com.lxt008.provider.personprovider/person") Uri resultUri = ContentUris.withAppendedId(uri, 10); //生成後的Uri 為:content://com.lxt008.provider.personprovider/person/10 parseId(uri)方法用於從路徑中獲取ID 部分: Uri uri =Uri.parse("content://com.lxt008.provider.personprovider/person/10") long personid = ContentUris.parseId(uri);//獲取的結果為:10
  • 97. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 97 版权归作者所有,禁止任何商业用途,违者必究. 9.1.4 使用 ContentProvider 共用資料 ContentProvider 類主要方法的作用: public boolean onCreate() 該 方 法 在 ContentProvider 創 建 後 就 會 被 調 用, Android 在 系 統 啟 動 時 就會 創 建 ContentProvider 。 public Uri insert(Uri uri, ContentValues values) 該方法用於供外部應用往 ContentProvider 添加資料。 public int delete(Uri uri, String selection, String[] selectionArgs) 該方法用於供外部應用從 ContentProvider 刪除資料。 public int update(Uri uri, ContentValuesvalues,String selection, String[] selectionArgs) 該方法用於供外部應用更新 ContentProvider 中的資料。 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, StringsortOrder) 該方法用於供外部應用從 ContentProvider 中獲取資料。 public String getType(Uri uri) 該方法用於返回當前 Url 所代表資料的 MIME 類型。如果操作的資料屬於集合類型,那麼 MIME 類型字串應該以 vnd.android.cursor.dir/開頭,例如:要得到所有 person 記錄的 Uri 為 content://com.lxt008.provider.personprovider/person ,那 麼返 回的 MIME 類型字串應該為: “vnd.android.cursor.dir/person”。如果要操作的資料屬於單一資料,那麼 MIME 類型字串 應 該 以 vnd.android.cursor.item/ 開 頭 , 例 如 : 得 到 id 為 10 的 person 記 錄 , Uri 為 content://com.lxt008.provider.personprovider/person/10 ,那 麼 返 回的 MIME 類型字串應該為: “vnd.android.cursor.item/person”。 9.2 ContentResolver 9.2.1 ContentResolver 當外部應用需要對 ContentProvider 中的資料進行添加、刪除、修改和查詢操作時,可以使 用 ContentResolver 類來完成, 要獲取 ContentResolver 物件, 可以使用 Activity 提供的 getContentResolver()方法。 ContentResolver 類提供了與 ContentProvider 類相同簽名的四個 方法: public Uri insert(Uri uri, ContentValues values) 該方法用於往 ContentProvider 添加資料。 public int delete(Uri uri, String selection, String[] selectionArgs) 該方法用於從 ContentProvider 刪除資料。 public int update(Uri uri, ContentValuesvalues,String selection, String[] selectionArgs) 該方法用於更新 ContentProvider 中的資料。
  • 98. 作者:神秘的 N 联系 QQ:369428455 交流群:284552167(提供源码下 载) 作者:神秘的 N 联系 QQ 369428455 98 版权归作者所有,禁止任何商业用途,违者必究. public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, StringsortOrder) 該方法用於從 ContentProvider 中獲取資料。 這些方法的第一個參數為 Uri,代表要操作的是哪個 ContentProvider 和對其中的什麼資料進 行操作 ,假 設給定 的是 : Uri.parse(“content://com.lxt008.provider.personprovider/person/10”) , 那麼將會對主機名稱為 com.lxt008.provider.personprovider 的 ContentProvider 進行操作,操作 的 資料為 person 表中 id 為 10 的記錄。 使用 ContentResolver 對 ContentProvider 中的資料進行添加、刪除、修改和查詢操作: ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse(“content://com.lxt008.provider.personprovider/person"); //添加一條記錄 ContentValues values = new ContentValues(); values.put("name", “lxt008"); values.put("age", 35); resolver.insert(uri, values); //獲取 person 表中所有記錄 Cursor cursor = resolver.query(uri, null, null, null, "personid desc"); while(cursor.moveToNext()){ Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1)); } //把 id 為 1 的記錄的 name 欄位值更改新為 liming ContentValues updateValues = new ContentValues(); updateValues.put("name", "liming"); Uri updateIdUri = ContentUris.withAppendedId(uri, 2); resolver.update(updateIdUri, updateValues, null, null); //刪除 id 為 2 的記錄 Uri deleteIdUri = ContentUris.withAppendedId(uri, 2); resolver.delete(deleteIdUri, null, null); 9.2.2 讀取電話本 Demo 請參考systemcontacts 進程間交互可以通過 ContentResolver 和 ContentProvider 類處理。