close

 

20170921 星期四

這篇文章從應用程式(Application)的高度來描述在開發Android APP時所需要的開發知識,每個應用程式的根目錄都必須包含 AndroidManifest.xml 檔案 (名稱要一字不差)。 宣示說明檔案可向 Android 系統顯示應用程式的基本資訊,也就是說系統在執行該應用程式的任何程式碼之前必須具備的資訊。

宣示說明檔AndrodiManifest.xml的檔案結構

下圖顯示宣示說明檔案的一般結構和可納入其中的元素。 每個元素和其所有屬性都會完全記錄在個別檔案中。

 組成應用程式的元件,許多元件都會對應到 Java 物件,包括應用程式本身的元素 ( <application> 元素) 與其主要元件:Activity (<activity>)、服務 (<service>)、廣播接收器 (<receiver>) 以及內容供應程式 (<provider>)。為實作每個元件的類別命名以及發佈類別的功能 (例如,類別可處理的 Intent 訊息)。 這些宣告可讓 Android 系統瞭解元件為何以及可在哪些情況下啟動。除了能聲明程序中的Activities, ContentProviders, Services, 和Intent Receivers,還能指定permissions和instrumentation。

 

<?xml version="1.0" encoding="utf-8"?>

<manifest>

   
<uses-permission/>
   
<permission/>
   
<permission-tree/>
   
<permission-group/>
   
<instrumentation/>
   
<uses-sdk/>
   
<uses-configuration/>  
   
<uses-feature/>  
   
<supports-screens/>  
   
<compatible-screens/>  
   
<supports-gl-texture/>  

   
<application>

       
<activity>
           
<intent-filter>
               
<action/>
               
<category/>
               
<data/>
           
</intent-filter>
           
<meta-data/>
       
</activity>

       
<activity-alias>
           
<intent-filter> . . . </intent-filter>
           
<meta-data/>
       
</activity-alias>

       
<service>
           
<intent-filter> . . . </intent-filter>
           
<meta-data/>
       
</service>

       
<receiver>
           
<intent-filter> . . . </intent-filter>
           
<meta-data/>
       
</receiver>

       
<provider>
           
<grant-uri-permission/>
           
<meta-data/>
           
<path-permission/>
       
</provider>

       
<uses-library/>

   
</application>

</manifest>

 

 Application元素的屬性

應用程式的宣告。應用程式元素可包括許多的子元素,許多子元素(例如 iconlabelpermissionprocesstaskAffinity, 和 allowTaskReparenting)可以設定值,而這些值可以設定應用程式的名稱、圖示、標題、主題等資訊。例如「android:icon」屬性可指定這個應用程式的代表圖示。「android:label」屬性代表的是應用程式的名稱,另一個是「android:theme」屬性,theme意思是「主題」,在Android中將元件外觀的資訊我們稱為一個樣式(style),而將樣式套用在整個應用程式或單一畫面中,就稱為theme。

<?xmlversion="1.0"encoding="utf-8"?>
<manifest . . . >
<application . . . >
<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel" . . . >
</activity> . . . </application>
</manifest>

Activity元素的屬性 

一個activity代表一個使用者介面者的螢幕視窗,簡單說一個Activity執行在螢幕上的動作,例如一個email 應用程式可能有一個activity 顯示新的emails列表,另外一個activity去編輯一個email, 而另一個activity去讀email的內容。假如一個應用程式有多個activity,我們則要在應用程式開啟時指定一個activity作動作。一個activity是被放置在Activity 類別內,定義如下所示 − 

public class MainActivity extends Activity{ 

}

 activity元素內還有「intent-filter」元素,代表該Activity類別會在本應用程式啟動時被第一個執行,也就是一個APP的第一個出現的畫面類別。 

Intent Filter

Intent 可以被想像成 Android 當中的事件,用來串連 Android 中的 Activity 與 Service 等元件。每當一個 Activity 想執行一個操作時,會創建出一個 intent,該 intent 描述了 Activity 想要做甚麼事、想處理什麼類型的資料等。  

Android 會比較 Intent 與 AndroidManifest.xml 中的 <intent-filter> 內容,以尋找最合適的 Activity 來處理回應 Intent 的請求。 

Intent 可以直接指定元件名稱,Android 會根據 AndroidManifest.xml 檔案中的宣告找出該元件並啟動之。但是如果 Intent 沒有指定對象的元件名稱,Android 會透過 <intent-filter> 去找出最適當的元件回應 Intent ,<intent-filter> 指定了元件可以回應的 Intent 類型,

Services

用來處理與應用程式相關的背景程式。它在背景執行長時間的操作。例如當使用者在使用不同的應用程式時,一個服務可能在背景持續地播放音樂。它可能在背景執行擷取資料的工作,不會阻礙使用者和某一個activity的互動性。

 

一個serivce是被放置在Service 類別內,定義如下所示 −

 

public clas MyService extends Service{

}

 

Broadcast Receivers

      用來處理Android OS與應用程式之間的通訊。

Content Providers

     用來處理資料及資料庫管理的工作

 

 


 

參考資料:https://developer.android.com/guide/topics/manifest/manifest-intro.html?hl=zh-tw

 

arrow
arrow
    文章標籤
    AndrodiManifest Android
    全站熱搜

    stanley 發表在 痞客邦 留言(0) 人氣()