Settings API

由 1 位貢獻者:

非標準

This API is available on Firefox OS for certified applications only.

摘要

Settings API 可存取、變更、監聽裝置設定的任何變化。裝置的設定選項可能帶有高敏感度的資訊並可能危害整個系統,因此僅限 Certified Apps 可使用此 API。

使用設定選項

透過 naviator.mozSettings 物件 (即 SettingsManager 介面的實例),即可操作設定選項。

存取設定選項

若要存取設定選項,必須先以 createLock() 函式建立鎖定機制。因為可能有多個 Apps 同時存取並更改設定,所以必須確保各個 App 不會受到其他 Apps 的影響。而建立鎖定機制之後,各個 App 均可於特定時間單獨存取設定。

在 Apps 擁有鎖定機制後,即可透過 get() 函式讀取任何設定。此函式將回傳 DOMRequest 物件,以處理成功或失敗的作業。不論任何狀況下,只要完成了成功/失敗的請求,均會自動解鎖之後才讓其他 Apps 存取設定。若有必要,也可透過鎖定機制的 closed 屬性,得知是否已解開鎖定。

在下列程式碼片段中,則建立了鎖定並請求了系統 wifi.enabled 設定的數值。另呼叫 console.log() 即可於主控台上顯示輸出的結果:

var lock    = navigator.mozSettings.createLock();
var setting = lock.get('wifi.enabled');

setting.onsuccess = function () {
  console.log('wifi.enabled: ' + setting.result);
}

setting.onerror = function () {
  console.warn('An error occured: ' + setting.error);
}

更改設定

設定值的更改程序與存取程序完全相同,但必須呼叫 set() 函式,此函式將回傳 DOMRequest 物件,讓你知道設定更改請求是否成功。

set() 函式會將物件作為自己的輸入參數。此物件為鍵值/數值的集合,而各個鍵值即代表 1 組設定的名稱,對應的數值又是設定的新數值。可參閱 Firefox OS 設定清單以進一步了解 (另請注意,不同裝置所使用的設定亦將有所差異)。

這裡可看到建立的 1 組鎖定,並於主控台上顯示 wifi.enabled 設定的結果。

var lock = navigator.mozSettings.createLock();
var result = lock.set({
  'wifi.enabled': true
});
 
result.onsuccess = function () {
  console.log("the settings has been changed");
}
 
result.onerror = function () {
  console.log("An error occure, the settings remain unchanged");
}

監聽設定中的變化

App 除了讀取、更改設定之外,亦可監聽發生過的任何變更。只要變更過設定,系統隨即觸發 settingchange 事件。此事件為 MozSettingEvent。此常態事件又可透過 2 項額外屬性進一步延伸:

只要設定 SettingsManager.onsettingchange 以指定 1 組回呼 (Callback,只要設定改變就會呼叫該回呼) 即可監聽 settingchange 事件。如果只想監聽某一特定設定的變化,則可呼叫如下的 SettingsManager.addObserver() 函式:

function handleWifi(event) {
  if (event.settingValue === true) {
    console.log("Hey! I can download that crazy heavy 4GB file")
  } else {
    console.log("Oh! I should stop downloading that crazy 4GB file")
  }
}

navigator.mozSettings.addObserver('wifi.enabled', handleWifi);

 

規格

目前仍未有任何規格。可參與 W3C 於 System Applications Working Group 中對此API 的討論。

另可參閱

Document Tags and Contributors

Contributors to this page: MashKao
最近更新: MashKao,