準備好Android Studio開發環境,就可以準備開發第一個Android應用程式專案。一個Android應用程式,除了需要的Java原始程式碼,還必須包含一些Android應用程式需要的檔案,這些檔案都要依照規定放在規定的目錄,例如每一個Android應用程式模組,一定要有一個名稱為“AndroidManifest.xml”的應用程式設定檔,它是一個XML格式的檔案。所以開發Android應用程式,除了使用Java程式設計語言撰寫一些需要的程式碼,也要開始學習Android應用程式專案的結構和各種需要的檔案。
這一章會說明如何建立一個Android應用程式專案,了解基本的應用程式專案結構。如何在模擬裝置與實際裝置上執行與測試應用程式。還有認識Android應用程式基本元件與應用程式的種類。
## 3-1 應用程式專案介紹
目前Android建議的應用程式開發工具為Android Studio,它整合所有開發Android 應用程式需要的工具,包含建立需要的模擬裝置,撰寫需要的程式與檔案,編譯、包裝、執行與測試應用程式,所有的工作都可以在Android Studio中完成。
### 3-1-1 建立應用程式專案
不管學習哪一種程式技術,第一個應用程式通常是在畫面上顯示一個簡單的問候訊息,例如“Hello world!”。接下來會說明如何建立一個Android應用程式專案,在模擬裝置執行以后,畫面上顯示簡單的問候訊息。雖然第一個Android應用程式專案非常簡單,不過這里說明建立與執行專案的操作,都是開發Android應用程式基本的操作。
依照下列步驟建立一個Android應用程式,并且在Android模擬裝置中執行與測試:
1. 啟動Android Studio,選擇“Start a new Android Studio project”:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_01.png)
2. 依照下列的說明輸入應用程式基本資訊,后面會詳細的說明。輸入完后選擇“Next”:
* Application Name:HelloAndroid。
* Company Domain:macdidi.net。
* Package Location:應用程式儲存的位置,使用原來的默認值。
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_02.png)
3. 選擇應用程式模組的種類與版本,勾選“Phone and Tablet”,在選擇“Minimum SDK”之前,先選擇“Help me choose”:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_03.png)
4. 顯示目前Android各版本實體裝置的百分比,如果應用程式的最低版本選擇4.0版,API Level為15,有78.3%的實體裝置可以執行這個應用程式。選擇4.0版的項目查詢詳細的資訊:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_04.png)
5. 選擇4.0版的項目以后,畫面右側顯示這個版本支援的項目,選擇“OK”:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_05.png)
6. 回到選擇應用程式種類與版本的畫面,采用“Minimum SDK”默認的選項“Android 4.0.3”,選擇“Next”:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_06.png)
7. 選擇“Blank Activity”,為應用程式加入一個基本的Activity元件,提供這個應用程式一個畫面,選擇“Next”:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_07.png)
8. 設定Activity元件的基本資訊,全部采用默認的名稱與設定,選擇“Finish”完成建立應用程式的設定:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_08.png)
9. Android Studio啟動新的應用程式視窗,第一次啟動的時候會顯示一個提示的視窗。取消“Show Tips on Startup”選項,下次就不會再出現。選擇“Close”:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_09.png)
10. 第一次啟動Android Studio應用程式視窗的時候,會執行一些初始化的工作,請耐心等候。這是完成初始化工作以后的畫面。:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_10.png)
11. 選擇Android Studio功能表“Run -> Run 'app'”,準備在Android模擬裝置中執行與測試。安裝好Android Studio以后,已經建立好一個默認的Android模擬裝置。在選擇裝置的對話框,勾選“Lanuch emulator”表示要啟動Android模擬裝置,Android virtual device目前只有一個選項,最后選擇“OK”:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_11.png)
12. Android Studio啟動Android模擬裝置,并且在模擬裝置安裝與啟動應用程式,這些工作需要花費一些時間,請耐心等候。
13. Android模擬裝置啟動完成后,畫面為鎖定的狀態,使用鼠標在畫面下方按住左鍵,往上拖拉以后放開就可以解鎖:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_12.png)
14. 解鎖以后就會出應用程式執行后的畫面:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_13.png)
在建立應用程式過程中輸入的資訊,有一些設定必須先認識,否則建立專案以后再執行修改的工作,會比較麻煩一些,而且容易出現錯誤。在第一個視窗的應用程式專案基本資訊部份:
* Application Name:為這個應用程式取一個名稱,應用程式安裝在裝置以后,這個名稱會出現在應用程式列表的圖示下方,所以名稱應該要盡量簡短一些。
* Company Domain:輸入公司或個人的網域名稱,用來決定應用程式的主要套件名稱,采用Java應用程式的套件規則。Android規定應用程式一定需要套件,不可以把程式碼放在默認套件,而且最少要有兩層。這個套件名稱非常重要,因為Android應用程式是采用套件名稱來識別的,所以在Google Play上的Android應用程式,不允許有同樣的套件名稱。Android Studio會把你輸入的網域名稱前后顛倒,當作前面的套件名稱,后面再加上應用程式的名稱。例如網域名稱是macdidi.net,應用程式名稱是HelloAndroid,套件的名稱就是“net.macdidi.helloandroid”。
* Package Location:決定應用程式儲存的位置,使用原來的默認值。
### 3-1-2 Android應用程式架構
一個Android應用程式專案除了必要的Java原始程式碼,還有各種應用程式需要的檔案,所以應用程式專案的目錄會比較多一些。在Android Studio建立一個應用程式專案以后,會建立一些默認的目錄與檔案,你需要先認識一些基本的目錄。下列是在“app”Android應用程式模組目錄下的內容:
* mainifests:應用程式模組的主要設定檔“AndroidManifest.xml”在這個目錄下。
* java:應用程式模組需要的Java原始程式碼都放在這個目錄下,展開它以后會看到一個套件,這是在建立專案時決定的主要套件名稱。目前這個套件下有一個默認元件類別MainActivity.java。
* res:Android應用程式很重要的資源目錄,應用程式需要的資源,例如圖形(png)與音效(mp3)檔案,還有各種XML格式的資源檔案都放在這個目錄。例如在“res/layout”目錄下,已經建立一個名稱為“activity_main.xml”的默認畫面配置檔案。
另外還有一個“Gradle Scripts”目錄,儲存與Gradle建置系統相關的設定檔,Gradle是Android Studio采用的全新應用程式建置系統。在Android Studio開發Android應用程式,一個應用程式可以有多個模組(Module)。例如一個音樂播放應用程式,可以包含移動電話、平板電腦、穿戴式三個模組,每一個模組都可以被建置成一個獨立的App。在Gradle Scripts目錄有下列兩個主要的設定檔,它們都是Groovy格式的文字檔:
* build.gradle(Project:專案名稱):應用程式最頂端的Gradle設定檔。以前面建立的應用程式專案來說,名稱是“build.gradle(Project:HelloAndroid)”。
* build.gradle(Module:模組名稱):每一個模組的Gradle設定檔。以前面建立的應用程式專案來說,名稱是“build.gradle(Module:app)”。
## 3-2 應用程式模組Gradle設定檔
每一個Android應用程式模組都有一個Gradle建置設定檔案,以前面建立的應用程式專案來說,這個設定檔是在“Gradle Scripts”目錄下的“build.gradle(Module:app)”。下列是這個檔案的基本格式:
~~~
apply plugin: 'com.android.application'
android {
compileSdkVersion 應用程式模組編譯的版本(Android API Level)
buildToolsVersion "Android建置工具的版本編號"
defaultConfig {
applicationId "應用程式模組的主套件名稱"
minSdkVersion 最低版本(Android API Level)
targetSdkVersion 主要版本(Android API Level)
versionCode 自定的應用程式模組版本編號
versionName "自定的應用程式模組版本名稱"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard- rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
~~~
在建立應用程式專案的時候,Android Studio會依照你的設定,建立一個像這樣的檔案:
~~~
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "net.macdidi.helloandroid"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
~~~
目前Android 2.3.x(API Level 10)的實體裝置還有7.4的比例,如果想要讓應用程式也可以在這一個版本運作,在2.3.x都支援應用程式使用的APIs的情況下,就可以把“defaultConfig”區塊中的“minSdkVersion”設定改為“10”。修改這個設定檔以后,Android Studio會提醒你執行專案同步的工作,選擇畫面上的“Sync Now”:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_14.png)
在“defaultConfig”區塊中的“versionCode”與“versionName”,可以設定應用程式的版本資訊:
* versionCode="數字":自己編制的版本流水號,例如1,2,3…。
* versionName="版本名稱":自己命名的版本名稱,例如1.1或2.0。
在“android”區塊中的“buildToolsVersion”設定,可以用來決定建置工具的版本。因為Andoird建置工具會經常更新,最新的版本可以在Android SDK Manager中查詢:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_15.png)
## 3-3 應用程式模組設定檔
每一個Android應用程式模組還有一個主要的設定檔案,檔案的名稱是“AndroidManifest.xml”,位置在應用程式模組的“mainifests”目錄下。它是一個XML格式的檔案,檔案里面都是一些應用程式非常重要的設定。設定檔的內容使用XML格式的寫法,你會使用一些Android提供的標簽執行需要的設定。
Android應用程式中會包含許多XML格式的檔案,不同用途的檔案,都會使用一些“標簽”來執行一些設定,以應用程式設定檔來說,它的基本內容會像這樣:
~~~
<?xml version="1.0" encoding="utf-8"?>
<!-- 上面這行表示這是一個XML文件,一定要在第一行 -->
<!-- 最外層一定是一個manifest的標簽 -->
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="net.macdidi.helloandroid" >
<!-- 在里面使用不同的標簽執行一些設定 -->
...
<!-- manifest的結束標簽,表示它的范圍 -->
</manifest>
~~~
因為在設計Android應用程式的時候,會使用很多XML格式的檔案,所以你必須先了解XML基本的語法。XML是一個純文字格式的檔案,不同技術的XML檔案,會有自己設定的各種標簽名稱。使用標簽有幾種固定的寫法,其中一種是包含開始和結束的標簽,在標簽名稱的后面,通常會有一些設定這個標簽的資訊,設定值一定要放在雙引號之間:
~~~
<標簽名稱 設定名稱="設定值" ... >
...
</標簽名稱>
~~~
在執行不同設定的時候也有另外一種寫法,在標簽名稱后面同樣可以有一些設定資訊,不過它沒有結束的標簽,在結尾部份一定要使用“/>”:
~~~
<標簽名稱 設定名稱="設定值" ... />
~~~
在XML文件中的標簽名稱和設定名稱都是分大小寫的,在一個標簽里面執行一些設定的時候,它們的前后順序并沒有特別規定。例如一個像這樣的標簽設定:
~~~
<Button android:color="#000"
android:text="Hello!" />
~~~
跟這樣的標簽寫法效果是一樣的:
~~~
<Button android:text="Hello! "
android:color="#000" />
~~~
### 3-3-1 設定應用程式基本資訊
使用Android Studio建立Android應用程式以后,會為你建立好應用程式設定檔案,里面已經包含在建立專案過程輸入的一些專案基本資訊,例如應用程式模組的名稱。如果在建立專案的時候輸入錯誤的資訊,也可以開啟這個檔案后直接修改它:
~~~
<?xml version="1.0" encoding="utf-8"?>
<!-- 最外層一定是一個manifest的標簽 -->
<!-- xmlns:android="...", 這個設定一定要有,而且固定不變 -->
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
... >
...
</manifest>
~~~
在mainfest標簽中有這些應用程式的基本設定:
* package="應用程式模組的主套件名稱":在建立應用程式的時候輸入的主套件名稱,盡可能不要修改它,如果真的要修改的話,在原始程式碼src目錄下的套件也要一起修改;存盤后,ADT會自動幫你修改gen目錄下的套件名稱。
* android:installLocation="安裝位置":設定應用程式安裝的位置,可以設定為“auto”、“internalOnly”或“preferExternal”,依序為由系統自動決定、只安裝在內建儲存位置和以外部儲存設備(記憶卡)為優先。
### 3-3-2 設定應用程式模組的設備資訊
在應用程式設定檔的“mainfest”開始和結束標簽里面,也可以使用這些標簽加入常用的設定:
~~~
<?xml version="1.0" encoding="utf-8"?>
<manifest .. >
<!-- 設定應用程式需要的操作設備 -->
<uses-configuration ... />
<!-- 設定應用程式需要的螢幕設備 -->
<supports-screens ... />
</manifest>
~~~
如果應用程式需要一些特定的硬件設備才可以正確的運作,例如觸控螢幕或實體鍵盤,可以使用放在mainfest標簽里面的“uses-configuration”標簽執行相關的設定。它可以使用下列這些設定:
* android:reqFiveWayNav="true|false":是否需要上下左右方向的控制設備。
* android:reqHardKeyboard="true|false":是否需要實體鍵盤。
* android:reqKeyboardType="設定":設定實體鍵盤種類,可以設定為undefined、nokeys、qwerty或twelvekey。
* android:reqNavigation="設定":是否需要瀏覽資料用的控制設備,可以設定為undefined、nonav、dpad、trackball或wheel。
* android:reqTouchScreen="設定":設定觸控螢幕設備種類,可以設定為undefined、notouch、stylus或finger,目前的實體裝置大部份都是finger這種觸控螢幕設備。
Android裝置有一個特點,就是各種裝置的螢幕尺寸有很大的差異,如果應用程式需要在特定的螢幕尺寸才可以正確的運作,可以使用放在mainfest標簽里面的“supports-screens”標簽執行相關的設定。它可以使用這些設定:
* android:smallScreens="true|false":是否支援比HVGA小的螢幕。
* android:normalScreens="true|false":是否支援HVGA、WVGA和WQVGA螢幕。
* android:largeScreens="true|false":是否支援比HVGA、WVGA和WQVGA大的螢幕。
* android:xlargeScreens="true|false":是否支援像平板電腦的大型螢幕。
* android:requiresSmallestWidthDp="設定":設定最低螢幕寬度,設定值為畫素,例如“480”。
* android:compatibleWidthLimitDp="設定":設定相容的最大螢幕寬度,設定值為畫素,例如“800”。
* android:largeWidthLimitDp="設定":設定最大螢幕寬度,設定值為畫素,例如“1024”。
### 3-3-3 設定應用程式元件資訊
Android應用程式設定檔里面,一定要加入需要的應用程式設定,在manifest標簽里面,一定有一個“application”標簽,在這個標簽中執行應用程式元件的重要設定:
~~~
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application ... >
<!-- 應用程式包含的Activity元件 -->
<activity
android:name="包含套件名稱的元件類別名稱" >
...
</activity>
<!-- 應用程式包含的服務元件 -->
<service
android:name="包含套件名稱的元件類別名稱" >
...
</service>
<!-- 應用程式包含的廣播接收元件 -->
<receiver
android:name="包含套件名稱的元件類別名稱" >
...
</receiver>
<!-- 應用程式需要的額外資訊 -->
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="..." />
</application>
</manifest>
~~~
Android提供許多不同應用程式的元件,讓你可以建立需要的應用程式,Android元件必須依照規則實作一個Java類別,寫好元件類別以后,一定要在應用程式設定檔的application標簽中加入對應的設定:
* Activity:設定Activity元件的相關資訊。
* Service:設定服務元件的相關資訊。
* Receiver:設定廣播接收與小工具元件的相關資訊。
這些標簽中有一個一定要加入的設定是“android:name”,使用它設定元件類別的名稱,這樣Android才可以正確使用這些應用程式元件。
## 3-4 Android應用程式介紹
就像個人電腦的應用程式一樣,Android應用程式也有幾種不同的類型,Android作業系統可以讓你依照應用程式的需求,開發許多不同種類的應用程式元件,這些元件可以組合成一個具有操作功能畫面和其它各種用途的應用程式。以應用程式的功能來說,Android應用程式可以分為這些種類:
* 一般應用程式:和個人電腦中的計算機或文書處理類似,Android可以建立各種提供操作功能與瀏覽資料畫面的“Activity”元件,依照應用程式的需求,可能會有多個“Activity”元件。
* 背景服務應用程式:在個人電腦中,通常會有一些在背景中運作的應用程式,例如預防病毒的軟件,你不需要去操作它,它會在作業系統的背景中幫我們檢查網絡或檔案是否有病毒的問題。Android可以建立在背景中運作的“Service”和“BroadcastReceiver”元件,這種元件會在Android作業系統的背景中運作,在遇到指定的情況時,它就會執行你指定的工作,例如需要在使用者開啟互聯網時執行資料更新的工作,就需要用到這類元件。
* 小工具:Android提供一種很特別的桌面元件,它可以讓使用者安裝在桌面指定的位置,執行功能操作或瀏覽資料,這種元件稱為“AppWidget”。
這些只是依照元件的分類來介紹Android應用程式,功能比較單純一點的應用程式,例如計算機,它只需要設計Activity元件提供畫面就可以了;如果應用程式的功能比較復雜,就可能同時需要Activity、Service、BroadcastReceiver和AppWidget四種主要的元件,才能完成應用程式需要的功能。
### 3-4-1 一般應用程式
如果一個Android應用程式,只有包含一些畫面讓使用者執行操作或瀏覽資料,就可以把它稱為一般應用程式。在一般Android應用程式中,一個畫面就是一個繼承自“android.app.Activity”的Java類別,通常會把它稱為Activity元件,如果應用程式的功能比較復雜一些,需要的畫面,也就是Activity元件就會多一些:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_16.png)?[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_17.png)
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_18.png)?[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_19.png)
在建立Android應用程式專案的時候,ADT會幫你建立好一個默認的Activity元件,如果你沒有特別修改名稱的話,它的類別名稱會是“MainActivity”,而且它會放在這個專案設定的主套件下。一般的應用程式設計通常會把應用程式需要的Activity元件類別放在主套件下。開啟這個Activity元件類別后會像這樣:
~~~
package net.macdidi.helloandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
// 繼承自Activity類別
public class MainActivity extends Activity {
// 覆寫Activity類別的onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
// 一定要加入呼叫父類別onCreate方法的敘述
super.onCreate(savedInstanceState);
// 指定這個元件使用的畫面配置資源
setContentView(R.layout.activity_main);
}
// 設定選單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
...
}
}
~~~
Android采用目前Java應用程式常見的框架(Framework)開發方式,這表示你在設計一些Android元件類別的時候,都會讓你繼承一個指定的類別,在撰寫元件類別的時候,也要依照這個元件的規則,覆寫一些需要的方法。以Activity元件類別來說,目前只需要執行畫面設計與指定的工作,Activity元件類別規定你覆寫“onCreate”方法以后,在方法中執行Activity元件的準備工作。Android在啟動這個Activity元件的時候,會呼叫“onCreate”方法一次,執行你寫在這個方法中的程式碼。執行覆寫工作的時候,大部份的情況下,都必須呼叫父類別被覆寫的方法,然后再執行其它需要的工作。
Android應用程式跟一般Java應用程式的設計方式有很大的差異,尤其是在應用程式的資源部份。雖然Activity元件是提供一個應用程式中的畫面,不過在上面的元件類別中你看不到跟畫面相關的程式碼,只有一行指定畫面配置資源的敘述,它呼叫父類別的“setContentView”方法,在參數中指定一個以“R.layout”開始的資源變量,這是Android用來代表畫面配置資源的格式,后面的名稱是畫面資源名稱,你可以使用這個名稱到“專案目錄\res\layout”目錄下找到這個附加檔名為“.xml”的檔案。開啟它后會是這樣的內容:
~~~
<!-- 決定畫面的配置 -->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<!-- 目前畫面只有一個文字符件 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
~~~
Android希望設計應用程式的畫面時,不是在Activity元件類別的程式碼中,使用撰寫程式碼的方式來設計需要的畫面,而是應該使用XML格式的畫面配置檔設計畫面,在這個畫面配置檔案中加入畫面需要的元件,在Activity元件類別把這個檔案引用進來當作它的畫面就可以了。
如果你執行過這個應用程式,出現的畫面應該是簡單的在畫面中顯示“Hello world!”的訊息,可是你在畫面配置檔案中也看不到這個訊息內容。這又是Android一個比較不一樣的設計方式,在應用程式中常需要顯示各種文字,例如顯示在功能按鈕上的文字,Android也不希望你直接設定在畫面配置檔中。所以在上面的文字符件(TextView)中,有一個“android:text”的設定,里面指定的是“@string/”開始的內容,這是Android另外一種文字資源,后面是它的資源名稱“hello_world”。你可以開啟“專案目錄\res\values\strings.xml”檔案,它的內容會像這樣:
~~~
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">HelloAndroid</string>
<string name="action_settings">Settings</string>
<!-- 在畫面配置檔中使用的文字資源 -->
<string name="hello_world">Hello world!</string>
</resources>
~~~
### 3-4-2 背景服務應用程式
一般應用程式在使用者啟動以后,可以在畫面上執行功能操作與瀏覽資料,不過結束應用程式以后,它們就不會運作了。在行動裝置中,有一些應用是不需要畫面,可是需要在背景中持續的運作,為我們執行一些指定的工作。例如Android作業系統內建一個檢查應用程式是否需要更新的程式,如果發現需要更新應用程式,它就會通知使用者更新應用程式的訊息。類似這樣的應用會使用服務(Service)元件來完成應用程式的需求。在Android裝置里面,通常會有一些內建的系統服務,或是一些應用程式啟動的服務在背景運作。執行“設定”應用程式,在應用程式項目的“執行中”可以看到有哪一些服務正在運作:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_20.png)?[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_21.png)
Android服務元件是一個繼承自“android.app.Service”的Java類別,完成需要的元件類別與設定以后,你可以啟動或停止一個服務,啟動的服務會在背景中執行你指定的工作,直到停止服務或重新開機。
行動裝置應用程式也經常需要處理“事件導向”的工作,例如電池電量過低或收到短信這類事件發生的時候,如果需要執行一些特定的工作,你可以使用Android另外一種可以在背景中運作的廣播接收元件,它是一個繼承自“android.content.BroadcastReceiver”類別的Java類別,完成元件類別的撰寫和執行需要的設定,這個應用程式被安裝在裝置以后,并不像一般應用程式有一個圖示可以啟動它,當裝置發生元件指定的事件時,Android就會啟動你的廣播接收元件并執行你指定的工作。
### 3-4-3 小工具
Android作業系統在一般的裝置中,提供五個桌面讓使用者可以自己放一些應用程式的圖示,點選它們就可以開啟應用程式,這也是其它作業系統都會有的功能。Android也提供一種很特別的小工具(AppWidget)元件,使用者把它安裝到桌面上指定的位置,部份的小工具還可以讓使用者調整大小。使用小工具來執行一些像是開啟與關閉無線網絡或藍芽的設定,或是使用其它各種應用的小工具,使用者不用進入應用程式,就可以執行一些功能操作或瀏覽資料。Android內建許多好用的小工具,你也可以開發各種不同應用的小工具:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_22.png)?[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_23.png)?[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_24.png)
小工具元件是一個繼承自“android.appwidget.AppWidgetProvider”的Java類別,它的設計方式會跟一般應用程式中的Activity元件很不一樣,不過你也需要為它建立一個元件類別,依照小工具元件的規則撰寫程式,設計畫面配置檔和建立所有需要的資源。
從Android 3.0開始,使用者安裝小工具元件的操作方式,改為從應用程式的列表進入后,選擇上方的小工具標簽,找到需要安裝的小工具,長按小工具元件后再放到桌面上。從Android 3.1開始,如果小工具允許修改大小的話,使用者長按安裝在桌面上的小工具,等到調整大小的框線出現以后,就可以把小工具調整為需要的大小了。
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_25.png)?[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_26.png)
## 3-5 在Android Studio撰寫Java程式碼
Android應用程式元件需要搭配Java原始程式與其它各種檔案,撰寫Java程式碼是開發Android應用程式很主要的工作。Java程式采用套件的結構,使用各種Java與Android的類別庫,都需要在程式碼正確的使用“import”敘述,應用程式才不會出現錯誤。
經過安裝與設定好的Android Studio,在輸入程式碼的時候,有許多方便的功能。在Android Studio應用程式視窗,開啟“app -> java -> net.macdidi.helloandroid”目錄下的“MainActivity”,它是一個Activity元件的Java原始程式碼。在這個程式碼的“onCreate”方法最后面,輸入一個在“java.util”套件中很常使用的“Date”類別:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_27.png)
輸入Date以后,Android Studio會自動列出可以選擇的項目,你可以注意到在java.util和java.sql都有Date類別,選擇java.util套件的Date類別以后,就會自動為你加入import敘述。
在撰寫Java程式碼的時候,也經常從別的地方復制后貼到Android Studio,例如下列這個程式片段:
~~~
List names = new ArrayList<>();
names.add("Simon");
names.add("Mary");
names.add("John");
~~~
把上面的程式碼復制后貼到Android Studio,也會自動為你加入import敘述。如果貼上的程式碼,出現可以選擇的情況,例如下列這個程式片段:
~~~
String name = "Simon";
Date birthdate = new Date();
BigInteger balance = new BigInteger("100");
~~~
Android Studio會顯示有多個Date可以選擇的訊息:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_28.png)
在上面的畫面按“Alt + Enter”,選擇正確的套件名稱后,就可以加入正確的import敘述:
[](http://www.codedata.com.tw/wp-content/uploads/2015/02/AndroidTutorial5_01_03_29.png)
- 第一堂
- 第一堂(1)西游記里的那只猴子
- 第一堂(2)準備 Android Studio 開發環境
- 第一堂(3)開始設計 Android 應用程式
- 第一堂(4)開發 Android 應用程式的準備工作
- 第二堂
- 第二堂(1)規劃與建立應用程式需要的資源
- 第二堂(2)設計應用程式使用者界面
- 第二堂(3)應用程式與使用者的互動
- 第二堂(4)建立與使用 Activity 元件
- 第三堂
- 第三堂(1)為ListView元件建立自定畫面
- 第三堂(2)儲存與讀取應用程式資訊
- 第三堂(3)Android 內建的 SQLite 數據庫
- 第四堂
- 第四堂(1)使用照相機與麥克風
- 第四堂(2)設計地圖應用程式 - Google Maps Android API v2
- 第四堂(3)讀取裝置目前的位置 - Google Services Location
- 第五堂
- 第五堂(1)建立廣播接收元件 - BroadcastReceiver
- 第五堂(2)系統通知服務 - Notification
- 第五堂(3)設計小工具元件 - AppWidget
- 第六堂
- 第六堂(1)Material Design - Theme與Transition
- 第六堂(2)Material Design - RecylerView
- 第六堂(3)Material Design - Shared Element與自定動畫效果