使用 AIR 執行階段和作業系統資訊Adobe AIR 1.0 以及更新的版本 本章節將討論 AIR 應用程式管理作業系統檔案關聯、偵測使用者活動,以及取得 Adobe® AIR® 執行階段相關資訊的方法。 管理檔案關聯您必須在應用程式描述器中宣告應用程式和檔案類型之間的關聯。在安裝期間,AIR 應用程式的安裝程式會使 AIR 應用程式與每一個宣告的檔案類型產生關聯,除非有其它應用程式為預設的開啟應用程式,否則會讓 AIR 應用程式做為預設的開啟應用程式。AIR 應用程式安裝程序不會覆寫現有的檔案類型關聯。若要從其它應用程式接管該項關聯,請在執行階段呼叫 NativeApplication.setAsDefaultApplication() 方法。 確認所需的檔案關聯在您的應用程式啟動時都會就定位,是一種較好的作法。因為 AIR 應用程式的安裝程式不會覆寫現有的檔案關聯,而且使用者系統中的檔案關聯隨時都可能改變。當其它應用程式具有目前的檔案關聯時,事先詢問使用者後再接管現有的關聯也是有禮貌的作法。 下列 NativeApplication 類別的方法可以讓應用程式管理檔案關聯,每一個方法都會採用五種類型的副檔名做為參數:
AIR 只能管理原本在應用程式描述器中宣告的檔案類型關聯。您無法取得未經宣告的檔案類型關聯,就算使用者已經手動建立檔案類型和應用程式之間的關聯也一樣。如果呼叫任何檔案類型管理方法時,提供的副檔名屬於應用程式描述器中未宣告的檔案類型,應用程式就會擲出執行階段例外。 取得執行階段版本的修補程式層級NativeApplication 物件具有 runtimeVersion 屬性,這個屬性是應用程式在其中執行的執行階段版本 (字串,例如 "1.0.5")。NativeApplication 物件也具有 runtimePatchLevel 屬性,這個屬性是執行階段的修補程式層級 (數字,例如 2960)。下列程式碼會使用這些屬性: trace(NativeApplication.nativeApplication.runtimeVersion); trace(NativeApplication.nativeApplication.runtimePatchLevel); 偵測 AIR 功能對於已合併至 Adobe AIR 應用程式的檔案,Security.sandboxType 屬性會設定為 Security.APPLICATION 常數所定義的值。您可以根據 Adobe AIR 安全執行程序中是否有檔案載入內容 (此內容不一定包含 AIR 專屬 API),如下列程式碼所示範: if (Security.sandboxType == Security.APPLICATION) { // Load SWF that contains AIR APIs } else { // Load SWF that does not contain AIR APIs } 未與 AIR 應用程式一併安裝的所有資源都會指定給與 Adobe® Flash® Player 在網頁瀏覽器中所指定的相同安全執行程序。遠端資源會根據其來源網域放置於不同的安全執行程序中;而本機資源則會放置於「具有網路連線的本機」、「具有檔案系統的本機」或「本機信任」的安全執行程序中。 您可以檢查 Capabilities.playerType 是否設定為 "Desktop",以得知是否要在執行階段中 (而且不是在於瀏覽器中執行的 Flash Player 內) 執行內容。 如需詳細資訊,請參閱:AIR 安全性。 追蹤使用者狀態NativeApplication 物件會傳送兩個事件,協助您偵測使用者是否正在使用電腦。在 NativeApplication.idleThreshold 屬性設定的時間間隔內,如果沒有偵測到任何滑鼠或鍵盤活動,NativeApplication 就會傳送 userIdle 事件。當下次發生鍵盤或滑鼠輸入活動時,NativeApplication 物件就會傳送 userPresent 事件。idleThreshold 時間間隔是以秒為單位來量測,預設值為 300 (5 分鐘)。您也可以透過 NativeApplication.nativeApplication.lastUserInput 屬性,取得上次使用者輸入活動的秒數。 下列幾行程式碼會將閒置臨界值設定為 2 分鐘,並且偵聽 userIdle 和 userPresent 事件: NativeApplication.nativeApplication.idleThreshold = 120; NativeApplication.nativeApplication.addEventListener(Event.USER_IDLE, function(event:Event) { trace("Idle"); }); NativeApplication.nativeApplication.addEventListener(Event.USER_PRESENT, function(event:Event) { trace("Present"); }); 備註: 在任兩個 userPresent 事件之間,只會傳送一個 userIdle 事件。
|
|