2009年12月25日 星期五

從無到有-實戰Android系統開發-程式實戰(1)-前言(Foreword)

程式實戰-如何由系統分析出來流程,來進行程式的撰寫過程,要提出重要的地方來說明分析。

經過需求分析、系統分析、系統設計等步驟,我們已經將系統的藍圖建構出來了,而在這個章節,我們要做的就是撰寫程式,將我們設計的系統實體化出來。不過,由於如果要將一個系統的程式碼一步一步的說明,就太多了。所以,我們在後續的章節會說明幾個重要的地方即可。依Android從程式撰寫到如何發佈到Android Market上,我們分成27個章節來說明,依下述描述所示:

預計範例為一個簡單的記事本系統,主要有一個記事列表畫面、編輯記事畫面。在下述的系統需求描述中,()中的項目編號,就是可以應用到的範圍。

在記事列表畫面(14),為主畫面。
選單為「系統設定」、「關於」。(5)
「系統設定」(12)為分類編輯、選取語系(13)、是否要訊息提醒、
設定要由前十、十五、三十分鐘等時間來提醒。
「關於」為出現系統訊息。(4)

在日期、時間到達前十、十五、三十分鐘,出現訊息提醒。(9)
列表時,長時間按住某一列時,會自動出現「編輯」、「刪除」等功能。(6)

在編輯記事畫面(14),可以選取日期(4)、時間(4)、屬於那個分類(15、16)、輸入記事內容。

新增時,新開一個Activity。(7)
編輯時,新開一個Activity,並且帶入一個key值,來查詢資料。(8)

1、2、3、11等章節為說明Android檔案結構及基礎程式邏輯。
10等章節 程式碼撰寫規範try catch。

1. 了解Android程式專案架構
2. 如何設計使用者介面
3. 了解Android基礎程式邏輯架構
4. 如何加入對話框(Dialog)
5. 如何加入選單(Menu)
6. 如何加入快捷選單(Context Menu)
7. 如何加入新的視窗(Activity)
8. 如何傳送資料到新視窗(Intent)
9. 如何使用到訊息提醒(Notification)
10. 如何設定記錄及Debug Log訊息(配合try catch機制)
11. 了解什麼是Activity的Life Cycle
12. 如何設定偏好資料(Preference)
13. 如何支援多國語系
14. 如何指定Android螢幕方向(直式、橫式顯示、自動切換)
15. 了解何謂Adapter(接口機制)
16. 如何加入下拉選單元件(Spinner)

上述範例,先以假想資料來操作。在17-19的章節。會儲存資料到資料庫。

17. 如何建立SQLite資料庫、資料表
18. 如何存取SQLite資料庫,透過SQLiteOpenHelper類別
19. 如何新增、刪除、更新資料

上述範例,可以儲存到資料庫後,在編輯記事時,增加地標欄位,可以先預設目前的地標。
在記事列表,增加可以頁標籤,可以切換成地圖模式,顯示在地圖有那些地方有記事。

20. 如何使用Google地圖的服務
21. 如何使用Map View
22. 如何加入按鍵控制(Key Event)
23. 如何取得現在位置(GPS/基地台三角定位)
24. 如何結合地圖及定位功能(My Location Overlay)
25. 如何在地圖上標上地標(Itemized Overlay)

完成上述功能,再發佈到Android Market上。

26. 如何產生應用程式的keys (使用key tools)
27. 如何發佈到Android Market

從無到有-實戰Android系統開發-系統設計(5)-記帳系統

接下來就是次要的所屬資料表,是要將記帳項目是屬於那個所屬的資料,記錄起來,才可以進行查詢、分析等進階功能的應用。設定這些欄位主要是依「從無到有-實戰Android系統開發-系統分析(9)」的新增所屬項目的系統畫面來分析。而有如表5的欄位分析。


表5

最後,是系統相關項目資料的設定,是要將有關系統方面的資料記錄起來,才可以進行系統方面的應用。設定這些欄位主要是依「從無到有-實戰Android系統開發-系統分析(10)」的系統畫面來分析。而有如表6的欄位分析。


表6

從無到有-實戰Android系統開發-系統設計(4)-記帳系統

接下來就是次要的類別資料表,是要將記帳項目是屬於那個類別的資料,記錄起來,才可以進行查詢、分析等進階功能的應用。設定這些欄位主要是依「從無到有-實戰Android系統開發-系統分析(7)」的新增類別項目的系統畫面來分析。而有如表3的欄位分析。



表3

接下來就是次要的帳戶資料表,是要將記帳項目是屬於那個帳戶的資料,記錄起來,才可以進行查詢、分析等進階功能的應用。設定這些欄位主要是依「從無到有-實戰Android系統開發-系統分析(8)」的新增帳戶項目的系統畫面來分析。而有如表4的欄位分析。



表4

從無到有-實戰Android系統開發-系統設計(3)-記帳系統

首先,我們依資料庫模型的分析,列出如表1所示的所有資料表及相關的說明。記帳項目資料表為主要的資料表,而跟它有關連的是三個次要的資料表,分別是類別、帳戶、所屬等資料表。
最後一個資料表是系統設定資料表,是用來設定系統相關的設定,例如:版本、資料庫路徑等欄位。



表1

首先,我們先來看主要的資料表,是要將記帳項目的資料,記錄起來,才可以進行查詢、分析等進階功能的應用。設定這些欄位主要是依「從無到有-實戰Android系統開發-系統分析(4)」的新增記帳項目的系統畫面來分析。而有如表2的欄位分析。



表2

從無到有-實戰Android系統開發-系統設計(2)-記帳系統

首先,我們要從系統功能、介面來設計可以儲存資料的資料庫及對應的資料表及欄位。依系統功能,我們可以知道主要是用一個記帳的主要資料表對應到類別、帳戶、所屬等的次要資料表,以及一個可以儲存系統相關資料的資料表。
依這樣的關係,我們整理出來相關資料庫模型,如下表所述:
ER Modem

從無到有-實戰Android系統開發-系統設計(1)-記帳系統

系統設計-如何由系統流程、功能來分析資料庫的設計。

我們透過需求分析、系統分析,了解一個系統的運作流程及系統功能、介面的整理。接下來,就是要實際的進行撰寫程式的工作。

不過,在之前,我們還在進行資料庫方面的分析,因為,要儲存記帳方面的資料。就要依系統功能、介面來設計可以儲存資料的資料庫及對應的資料表及欄位。

首先,我們先來介紹一下Android的預設資料庫SQLite吧。SQLite是一種在嵌入式系統中很常見的資料庫,而且所有的資料都會儲存在一個檔案中。就跟Microsoft Access一樣,是為了方便遷移。而SQLite有簡潔的SQL存取介面、相當快的存取速度,而且僅佔用相對其他資料庫少量的記憶體空間。在Android平台上,SQLite資料庫可以用來儲存應用程式中使用到的資料,還可以透過Content Provider等方式,來讓其他應用程式也可以取得其中的資料。

在後續的章節中,我們先分析系統功能、介面來設計資料庫,畫出ER模型、資料表與資料表之間的關連,最後,會用一個簡單的例子來說明如何存取SQLite中的資料。

2009年12月24日 星期四

從無到有-實戰Android系統開發-系統分析(10)

最後,我們要做的Prototyping,就是進行一般設定及顯示關於的動作。一進入一般設定的畫面,就先列出目前可以進行一般設定的選項列表。如圖22所示。目前可以設定資料庫及語系等基本功能。
在資料庫選項,可以決定是否要將資料庫的檔案儲存在SD卡中。在語系方面可以進行繁體中文及英文,二種語系的轉換。


圖22

回到系統一開始進入的畫面,按下手機上的「menu」按鈕時,會出現「帳戶結餘」、「設定」、「關於」等選項。按下「關於」功能畫面,就會顯示出系統的相關資訊,例如:版本、作者、網站等資訊。如圖23所示。


圖23

從無到有-實戰Android系統開發-系統分析(9)

接下來,我們要做的Prototyping,就是進行設定歸屬項目的動作。一進入歸屬項目的畫面,就先列出所有的歸屬列表。如圖20所示。
要編輯或刪除某個選項,就長按住某個選項,就會出現「編輯及刪除」的選項視窗。按下「建立新歸屬」按鈕,可以進入新增歸屬畫面。如圖21所示。


圖20


在新增歸屬畫面,可以進行歸屬名稱的輸入,如圖21所示。最後再按下「儲存」按鈕來儲存資料到資料庫中,也可以按下「取消」。回到上一層項目。


圖21

從無到有-實戰Android系統開發-系統分析(8)

接下來,我們要做的Prototyping,就是進行設定帳戶項目的動作。一進入帳戶項目的畫面,就先依資產、負債的區別來列出所屬的帳戶列表,是以資產區別為預設。如圖18所示。
要編輯或刪除某個選項,就長按住某個選項,就會出現「編輯及刪除」的選項視窗。按下「新增資產(負債)」按鈕,可以進入新增帳戶畫面。如圖19所示。


圖18


在新增帳戶畫面,可以進行帳戶名稱、開啟帳戶金額設定的輸入,如圖19所示。而開啟帳戶金額的設定是為了讓使用者可以設定此帳戶目前可以使用的金額。


圖19

從無到有-實戰Android系統開發-系統分析(7)

接下來,我們要做的Prototyping,就是進行設定類別項目的動作。一進入類別項目的畫面,就先依支出、收人的區別來列出所屬的類別列表,是以支出區別為預設。如圖16所示。
要編輯或刪除某個選項,就長按住某個選項,就會出現「編輯及刪除」的選項視窗。按下「新增新支出(收入)」按鈕,可以進入新增類別畫面。如圖17所示。


圖16


在新增類別畫面,可以進行類別名稱、此類別預算的輸入,以及是否要判斷使用預算的勾選項目,如圖17所示。是否要判斷使用預算,是讓使用者可以設定此類別預算金額。如果在新增記帳項目時,如果此類別總計的金額超過的話,會提示使用者。

圖17

2009年12月22日 星期二

深入淺出Android程式設計(29)-如何將Eclipse中文化及方便的小工具DroidDraw

在這個最後的章節,我們要介紹如何將Eclipse中文化及方便的小工具DroidDraw的安裝及用法。

如何將Eclipse中文化,首先,先啟動Eclipse,接下來在選取選單「Help」中的「Software Updates....」選項。
在點選「Software Updates....」選項後,就會出現Software Updates的視窗,切換頁標籤至「Available Software」,再點選「Add Site...」按鈕。就會出現要新增外掛的網址輸入視窗。
在新增外掛的網址輸入視窗,在Location欄位輸入「http://download.eclipse.org/technology/babel/update-site/ganymede
」,再按下「OK」按鈕。就會回到原來的Software Updates視窗。
在Software Updates視窗,就會多出剛才輸入的網址而產生出來的選項,點選開來,再勾選「Babel Language Packs in traditional Chinese」選項,再按下「Install」按鈕,進行安裝動作,如圖75、圖76所示。再重新開啟Eclipse,就變成中文化的介面,如圖77所示。


圖75


圖76


圖77

而方便的小工具DroidDraw,是一個可以讓我們在設計Android介面的好工具,在Eclipse的開發介面沒有提供類似其他開發工具那樣,可以直接拖曳物件的功能,所以,有人就用Java寫了類似的工具,幫助Android的開發人員可以比較直覺的方式來拖曳物件,完成Android的介面。
首先,在連到DroidDraw的網頁(參考網址如下:http://www.droiddraw.org/ ),就會直接出現可以編輯的畫面,如圖78所示。在編輯畫面,可以先設定畫面的層次及螢幕的尺寸。可以選取的選項,如下所述:
Root Layout(畫面層次):Absolute Layout、Linear Layout、Relative Layout、Scroll View、Table Layout

Screen Size(螢幕尺寸):QVGA Land scape、QVGA Portrait、HVGA Land scape、HVGA Portrait


圖78

可以拖曳物件到編輯畫面上,再選取要編輯的物件,在右上方的視窗,切換到Properties(屬性頁籤)來設定此物件的屬性。編輯好介面後,在右下方,按下「Generate」按鈕來產生對應的XML內容,如圖76所示。
下一步就可以將這個XML內容選取後,複製到Eclipse的介面XML檔案。


圖79

總算結束了鐵人賽的連續發文,謝謝大家的支持。有關Android的介紹不是結束,而是開始。
我會再整理一些有關Android程式開發方面的文章,再分享給大家。預計會用一些程式範例,來說明如何驅動事件、每一個控制項的運作方式、資料庫SQLite的應用、如何使用Map View控制項等進階主題。
如果大家在it邦看不到圖片的話,大家也可以來看我的部落格:http://estyleservice.blogspot.com/,我會陸續更新之前我寫的文章及後面的進階主題。

深入淺出Android程式設計(28)-如何用非Eclipse平台來建立專案,以「Hello,Android!」專案說明

在這個章節要來介紹有關如何用非Eclipse平台來建立專案,以「Hello,Android!」專案說明。

如果不想使用Eclipse,而想用其它IDE開發介面,或者像傳統的C那樣,使用文字編輯器與命令列工具,那麼ADT外掛套件就無法協助來處理這些需求,不過,不用擔心,如果開發人員不會因為不使用Eclipse ADT外掛套件而失去之前章節,所提到的那些功能。

ADT外掛套件只是將一系列有關Android SDK的工具加以包裝(這些工具,例如:模擬器、aapt、adb、ddms)並且整合在Eclipse平台上,因此,是有可能用其它工具來包裝這些工具,如「Ant」。

Android SDK會建立的樣版檔案包含了一個可以跟「Ant」相容的build.xml檔案與檔案名稱為「activityCreator.py」的python檔案(在Windows平台為「activityCreator.bat」檔案名稱),可以為專案建立所有的基本目錄與檔案,讓開發人員可以從命令列建立專案,或者選擇整合到其它的IDE開發工具中。

例如,可以在Dos視窗,用以下命令建立與Eclipse建立類似的專案架構。請參考之前的章節-「如何在其他IDE或工具開發Android應用程式(上)」當中的描述。

activityCreator.py --out HelloAndroid com.google.android.hello.HelloAndroid

下一步,為了建立出專案,開發人員得接著執行「ant」相關命令,然後會在專案路徑底下的bin目錄下會產生一個HelloAndroid.apk檔案,而.apk檔案是一個Android對應用程式的封裝檔案,最後再使用「adb」工具就可以安裝到模擬器來進行測試。

上述這些運作方式及工具的操作,請參考之前的章節,由深入淺出Android程式設計(15)的章節到深入淺出Android程式設計(21)的章節,都有提到這方面的運作。

深入淺出Android程式設計(27)-如何進行專案除錯,以「Hello,Android!」專案說明

在Eclipse的ADT外掛與Eclipse的除錯整合的非常好,為了要測試這樣的機制,讓我們在程式碼裡插入一個bug,修改一下專案的程式碼如下所述:

public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Object o = null;
o.toString();
setContentView(R.layout.main);
}
}

當這樣的變動,加入「Object o = null;」及「o.toString();」等錯誤的程式碼,就會出現「Null Pointer Exception」的錯誤資訊,再一次執行專案時,就會顯示有錯誤訊息,如圖73所示。

圖73

如果要找出那裡發生錯誤,可以在「Object o = null;」這一行程式碼建立中斷點,使用的方式就是在Eclipse行號左邊區域建立中斷點,如圖74所示,然後選取選單「Run」中的選取「Debug」選項,來載入最後程式進入除錯模式。程式會重啟模擬器,但是,執行到中斷點時,程式會中斷,然後就可以在Eclipse的除錯模式下,一步一步的執行程式碼,如同除錯其它程式一樣。


圖74

2009年12月13日 星期日

深入淺出Android程式設計(26)-如何將介面升級到以XML方式來排版,以「Hello,Android!」專案說明

在這個章節要來介紹有關如何將介面升級到以XML方式來排版,以「Hello,Android!」專案說明。

如何將介面升級到以XML方式來排板

在上一個章節,我們所介紹的「Hello,Android!」專案是用開發人員稱之為程式化開發的介面,也就是說直接用程式碼來建構使用者介面,但是,這樣的建構介面的方式會發生許多問題,而小小的排版變動可能導致大部分的程式變更,最大的問題是容易忘記的是如何把正確的介面顯示在螢幕上,這可能導致發生錯誤並浪費時間除錯。

這也是為什麼Android SDK會提供另一種介面的建立模式,使用XML排版檔案來記錄介面的資料,最簡單了解的方法就是看下述的範例,下面的XML排版檔案內容就是跟剛編譯的程式同樣的的排版建構:




在上述的XML檔案中的標籤(Tag)可以自由使用,結構也很簡單,標籤(Tag)的名稱就是View物件的類別名稱,在這個範例,標籤(Tag)就只有一個「TextView」,開發人類可以使用任何繼承自View物件的類別做為標籤(Tag)名稱,包含一些開發人員所做的類別,這樣的結構比較容易快速建立界面,比起開發人員的程式碼要簡單的多了,這樣的模式受到Web開發的啟示,將參數從程式邏輯抽離只用來填入與取得資料。

在這個XML使用了一些屬性,大致說明如下:
xmlns:android

名稱空間宣告,讓Android工具參考Android名稱空間的一般屬性,大部分的XML排版檔必須使用這個名稱空間。

android:layout_width

這個屬性宣告View要佔螢幕多少空間,在這個例子,唯一的View要佔用全部的螢幕,所以使用「fill_parent」這個參數,就是填滿的意思。

android:layout_height

就像android:layout_width的屬性一樣,除了它是指螢幕可用的高度。

android:text

設定TextView包含的文字屬性,這上述的範例中,就是設定成「Hello,Android!」

那麼這個XML檔案會放在那裡呢?目前的設定是放到專案目錄下的res目錄底下的layout目錄,預設的檔案名稱是main.xml,如圖72所示。



圖72

下一步,打開Package Explorer下原始碼目錄內的R.java檔案,看起來的內容如下所述:

public final class R {
public static final class attr {
};
public static final class drawable {
public static final int icon=0x7f020000;
};
public static final class layout {
public static final int main=0x7f030000;
};
public static final class string {
public static final int app_name=0x7f040000;
};
};

Android專案的R.java檔用來索引定義在這個檔案的內裡使用的資源,開發人員可以在程式碼內使用這個類別來做為方便參考的索引記錄。

參考資料:
Android SDK Document http://code.google.com/android/documentation.html

深入淺出Android程式設計(25)-執行程式碼,以「Hello,Android!」專案說明

如何執行程式碼

在Eclipse使用ADT外掛套件,就很容易就可以執行專案程式,進入Eclipse平台,選取選單「Run」中的「Run Configurations…」選項,如圖65所示。




圖65

進入Run Configurations視窗,選取左邊的專案型態為「Android Application」的項目,按下滑鼠右鍵,選取「New」選項,建立新的配置設定,預設會依目前的專案,自動建立所屬的配置設定。如圖66所示



圖66

新的配置設定視窗,如圖67所示。在「Name」欄位上輸入「HelloAndroid」配置名稱欄位值,切換到「Android」頁標籤,點選「Browse...」來選擇所屬的專案,而ADT外掛套件會掃瞄專案內的每一個Activity的子類別加到Activity標籤下的下拉項目,因為目前Hello,Android專案只有一個Activity,所預設值就直接選取即可,其他項目使用預設值即可。如圖68所示。



圖67



圖68

接下來就是要執行程式了,進入Eclipse平台,選取選單「Run」中的「Run」選項,來執行應用程式。如圖69所示。



圖69

下一步在執行那一種應用程式的視窗,選取「Android Application」,就會啟動Android的模擬器,來執行應用程式,如圖70所示。完成執行後,就會在模擬器畫面上出現結果。如圖71所示。



圖70



圖71

上述就是執行的步驟,在下一個章節就是介紹如何安排介面上設計及其他檔案的作用。

參考資料:
Android SDK Document http://code.google.com/android/documentation.html

2009年12月8日 星期二

從無到有-實戰Android系統開發-系統分析(6)

下一步,我們要做的Prototyping,就是進行設定資料的動作。一進入設定資料的畫面,就有三個選項列表,分別是類別設定、帳戶設定、歸屬設定等選項。如圖15所示。


可以依據使用者目前想要設定那方面的資料,再點選進入。


圖15