Android 設定

在 Android 平台上,您可以使用應用程式描述器的 android 元素,新增資訊至 Android 應用程式資訊清單,這是 Android 作業系統所使用的應用程式屬性檔案。建立 APK 套件時,ADT 會自動產生 Android Manifest.xml 檔案。AIR 會將某些屬性設定為特定功能運作所需的值。在 AIR 應用程式描述器 android 區段中設定的任何其他屬性,會新增至 Manifest.xml 檔案中對應的區段。

備註: 對於多數 AIR 應用程式,您必須在 android 元素中設定應用程式所需的 Android 權限,但是通常不需要設定任何其他屬性。

您只能設定接受字串、整數或布林值的特質。不支援在應用程式套件中設定資源參照。

備註: 執行階段至少需要版本 14 以上的 SDK。如果您希望建立僅適用於較高版本的應用程式,請確定資訊清單包含正確版本的相應 <uses-sdk android:minSdkVersion=""></uses-sdk>

保留的 Android 資訊清單設定

AIR 會在產生的 Android 資訊清單文件中設定數個資訊清單項目,以確保應用程式與執行階段功能可正常運作。您無法定義下列設定:

manifest 元素

您無法設定 manifest 元素的下列特質:

  • package

  • android:versionCode

  • android:versionName

  • xmlns:android

activity 元素

您無法設定主要 activity 元素的下列特質:

  • android:label

  • android:icon

application 元素

您無法設定 application 元素的下列特質:

  • android:theme

  • android:name

  • android:label

  • android:windowSoftInputMode

  • android:configChanges

  • android:screenOrientation

  • android:launchMode

Android 權限

Android 安全模型規定每個應用程式必須要求權限,才能使用涉及安全或隱私的功能。這些權限必須在封裝應用程式時指定,且無法在執行階段變更。當使用者安裝應用程式時,Android 作業系統會通知使用者應用程式所要求的權限。如果未要求某個功能所需的權限,當應用程式存取該功能時,Android 作業系統可能會擲出例外,但不保證一定會有例外。執行階段會將例外傳輸至您的應用程式。若出現無訊息失敗的狀況,會將權限失敗訊息新增至 Android 系統記錄。

在 AIR 中,必須在應用程式描述器的 android 元素內指定 Android 權限。將使用下列格式新增權限 (其中的 PERMISSION_NAME 為 Android 權限的名稱):

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.PERMISSION_NAME" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

manifest 元素內的 uses-permissions 陳述式會直接新增至 Android 資訊清單文件。

使用各種 AIR 功能需要下列權限:

ACCESS_COARSE_LOCATION
允許應用程式透過 Geolocation 類別存取 WIFI 與行動電話網路位置資料。

ACCESS_FINE_LOCATION
允許應用程式透過 Geolocation 類別存取 GPS 資料。

ACCESS_NETWORK_STATE 與 ACCESS_WIFI_STATE
允許應用程式透過 NetworkInfo 類別存取網路資訊。

CAMERA
允許應用程式存取攝影機。
備註: 當您要求使用攝影機功能的權限時,Android 會假設您的應用程式也需要攝影機。如果攝影機為應用程式的選擇性功能,則應為攝影機新增 uses-feature 元素至資訊清單,將所需的特質設為 false 。請參閱 Android 相容性篩選

INTERNET
允許應用程式提出網路要求。也允許遠端除錯。

READ_PHONE_STATE
允許 AIR 執行階段在通話期間將音效靜音。如果應用程式在背景播放音效,則應設定此權限。

RECORD_AUDIO
允許應用程式存取麥克風。

WAKE_LOCK 與 DISABLE_KEYGUARD
允許應用程式使用 SystemIdleMode 類別設定,避免裝置進入休眠。

WRITE_EXTERNAL_STORAGE
允許應用程式寫入裝置上的外部記憶卡。

例如,若要設定需要每個權限的應用程式的權限,可以新增下列項目至應用程式描述器:

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
                            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
                            <uses-permission android:name="android.permission.CAMERA" /> 
                            <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
                            <uses-permission android:name="android.permission.INTERNET" /> 
                            <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
                            <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                            <uses-permission android:name="android.permission.WAKE_LOCK" /> 
                            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Android 自訂 URI 配置

您可以使用自訂 URI 配置,從網頁或原生 Android 應用程式來啟動 AIR 應用程式。自訂 URI 支援有賴於 Android 資訊清單中指定的比對方式篩選,因此此技術無法用於其他平台。

若要使用自訂 URI,請新增 intent-filter 至 <android> 區塊內的應用程式描述器。下列範例中的兩個 intent-filter 元素都必須指定。編輯 <data android:scheme=" my-customuri "/> 陳述式,以反映自訂配置的 URI 字串。

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application> 
                            <activity> 
                            <intent-filter> 
                            <action android:name="android.intent.action.MAIN"/> 
                            <category android:name="android.intent.category.LAUNCHER"/> 
                            </intent-filter> 
                            <intent-filter> 
                            <action android:name="android.intent.action.VIEW"/> 
                            <category android:name="android.intent.category.BROWSABLE"/> 
                            <category android:name="android.intent.category.DEFAULT"/> 
                            <data android:scheme="my-customuri"/> 
                            </intent-filter> 
                            </activity> 
                            </application> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

比對方式篩選會通知 Android 作業系統,應用程式已經可以執行指定的動作。在自訂 URI 的狀況下,這代表使用者按一下使用該 URI 配置的連結 (且瀏覽器不知道如何處理)。

當經由自訂 URI 叫用應用程式時,NativeApplication 物件會傳送 invoke 事件。包括查詢參數的連結 URL,置於 InvokeEvent 物件的 arguments 陣列中。您可以使用任何數量的 intent-filters。

備註: StageWebView 實體中的連結無法開啟使用自訂 URI 配置的 URL。

Android 相容性篩選

Android 作業系統使用應用程式資訊清單檔案中的數個元素,判斷應用程式是否與指定的裝置相容。新增此資訊至資訊清單為選擇性。若未包含這些元素,應用程式將可安裝在任何 Android 裝置上。不過,應用程式不見得可以在任何 Android 裝置上正確地運作。例如,在沒有攝影機的手機上,攝影機應用程式用途不大。

可用來篩選的 Android 資訊清單標記包括:

  • supports-screens

  • uses-configuration

  • uses-feature

  • uses-sdk (在 AIR 3+ 中)

攝影機應用程式

如果為應用程式要求攝影機權限,Android 會假設應用程式需要所有可用的攝影機功能,包括自動對焦與閃光燈。如果應用程式不需要所有的攝影機功能,或攝影機為選擇性功能,您應該設定攝影機各個 uses-feature 元素,指示選擇性的功能。否則,當使用者的裝置缺乏其中一項功能或完全沒有攝影機時,將無法在 Android Market 上找到您的應用程式。

下列範例說明如何要求攝影機權限,並讓所有攝影機功能成為選擇性:

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.CAMERA" /> 
                                <uses-feature android:name="android.hardware.camera" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.flash" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

音效錄製應用程式

如果要求音效錄製的權限,Android 也會假設應用程式需要麥克風。如果音效錄製為應用程式選擇性功能,可以新增 uses-feature 標記,指定麥克風並非必要。否則,當使用者的裝置沒有麥克風時,將無法在 Android Market 上找到您的應用程式。

下列範例說明如何要求使用麥克風的權限,並將麥克風硬體設為選擇性:

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                                <uses-feature android:name="android.hardware.microphone" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

安裝位置

您可以將 Android manifest 元素的 installLocation 特質設為 auto preferExternal ,以允許應用程式安裝或移至外部記憶卡:

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest android:installLocation="preferExternal"/> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Android 作業系統不保證您的應用程式將會安裝至外部記憶體。使用者也可以使用系統設定應用程式,在內部與外部記憶體之間移動應用程式。

應用程式即使安裝在外部記憶體,應用程式的快取與使用者資料 (像是 app-storage 目錄的內容、共用的物件與暫存檔案) 仍然儲存在內部記憶體中。為了避免使用過多的內部記憶體,請慎選儲存至應用程式儲存目錄的資料。大量資料應使用 File.userDirectory File.documentsDirectory 位置 (兩者皆對應至 Android 上 SD 卡的根目錄) 儲存至 SDCard。

在 StageWebView 物件中啟用 Flash Player 和其他外掛程式

在 Android 3.0+ 中,應用程式必須在 Android 應用程式元素中啟用硬體加速,外掛程式內容才能在 StageWebView 物件中顯示。若要讓外掛程式顯示,請將 application 元素的 android:hardwareAccelerated 屬性設定為 true

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application android:hardwareAccelerated="true"/> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

顏色深度

在 AIR 3 與更新的版本中,執行階段會設定顯示,以顯示 32 位元色彩。在舊版 AIR,執行階段會使用 16 位元色彩。您可以使用應用程式描述器的 <colorDepth> 元素,指示執行階段使用 16 位元色彩:

<android> 
                            <colorDepth>16bit</colorDepth> 
                            <manifestAdditions>...</manifestAdditions> 
                            </android>

使用 16 位元顏色深度可提高顯示效能,但會犠牲顏色精確度。