[ 行動 App 開發密技 ] Firefox OS Web API 參考文件

作者:
瀏覽:577

Firefox OS Web API 參考文件
- 手機振動 (Vibration API)
- 位置資訊 (Geolocation API)
- SD卡存取 (Device Storage API)

手機振動 (Vibration)
Vibrate API 可以使手機產生振動,您只需要將振動的毫秒數作為參數,即可產生效果。 現今它已是一個 Web 開放標準的 API,在 Firefox OS 中您可以直接使用,無需特別的權限宣告。

權限宣告:無

範例:

window.navigator.vibrate([200]); // single vibration window.navigator.vibrate([200, 100, 200]); // vibration pattern window.navigator.vibrate(0); // stop vibration

獲取位置信息 (Geolocation)

Geolocation API 讓您可以取得使用者目前所在的地理位置資訊,現今它已是一個 Web 開放標準的 API,在 Firefox OS 中您可以直接使用,無需特別的權限宣告。

但當您使用這個 API 企圖存取使用者位置時,系統會出現一個視窗詢問使用者是否願意透露位置訊息給您的App,並且提供一個預設選項記住使用者的選擇。

權限宣告:無

範例:

navigator.geolocation.getCurrentPosition(function(position) { console.log('latitude ' + position.coords.latitude); console.log('longitude ' + position.coords.longitude); }, function() { console.warn('Error: cannot fetch location'); });

SD卡存取 (Device Storage)

DeviceStorage API 提供 SD 卡內資料存取介面,可以讀取圖片檔、聲音檔、影片檔,以及 SD 卡的其他檔案,以及檢視 SD 卡空間使用率。

由於它牽涉到使用者的儲存裝置資訊,目前僅開放審查通過的App(privileged/certified)使用這個API。您的App必須提出使用這個 API 的聲明,並且通過審查方可使用。

權限宣告:依照檔案類型(圖片、影片、聲音、其他)有不同宣告方式,每種宣告還分 “readonly”, “readwrite”, “readcreate” 三種級別,分別代表「只讀取」、「讀取與修改」、「讀取與新增」。您可依照需求作適當的權限宣告。

"permissions": { "device-storage:pictures":{ "access": "readonly" }, "device-storage:music":{ "access": "readcreate" }, "device-storage:videos":{ "access": "readwrite" }, "device-storage:sdcard":{ "access": "readonly" } }

範例:

1. 音樂檔案列表 (“device-storage:music”:{ “access”: “readonly” })

var type = 'music'; var deviceStorage = navigator.getDeviceStorage(type);

if (!deviceStorage) { console.warn('Error: cannot get DeviceStorage for ' + type); return; }

var request = deviceStorage.enumerate(); request.onsuccess = function(e) { var file = request.result; console.log('file name ' + file.name); console.log('file size ' + file.size); console.log('file type ' + file.type); console.log('file last Modified Date ' + file.lastModifiedDate); request.continue(); };

request.onerror = function() { console.warn('Error: cannot list files in SD card - ' + request.error.name); };

2. 讀取某個 SD 卡檔案 (“device-storage:pictures”:{ “access”: “readonly” })

var type = 'pictures'; var deviceStorage = navigator.getDeviceStorage(type);

if (!deviceStorage) { console.warn('Error: cannot get DeviceStorage for ' + type); return; }

var filename = 'downloads/DSC02798.JPG'; var request = deviceStorage.get(filename); request.onsuccess = function(e) { var file = request.result; var url = URL.createObjectURL(file); var myImage = document.getElementById('profilePhoto'); myImage.src = url; };

request.onerror = function() { console.warn('Error: get file from SD card - ' + request.error.name); };

3. 寫入檔案到 SD 卡 (“device-storage:sdcard”:{ “access”: “readcreate” })

var type = 'sdcard'; var deviceStorage = navigator.getDeviceStorage(type);

if (!deviceStorage) { console.warn('Error: cannot get DeviceStorage for ' + type); return; }

var filename = 'test-' + Math.random().toString() + '.txt'; var pathname = 'test-tmp/' + filename; console.log('file path: ' + pathname);

var blob = new Blob(['hello', 'world'], {type: 'text/plain'});

var request = deviceStorage.addNamed(blob, pathname); request.onsuccess = function(e) { // try to get the file var readRequest = deviceStorage.get(pathname); readRequest.onsuccess = function() { var file = readRequest.result; var reader = new FileReader(); reader.onload = function(e) { console.log('file content ' + e.target.result); }; reader.readAsText(file); };

readRequest.onerror = function() { console.warn("Error: read file failure - " + request.error.name); }; };

request.onerror = function() { console.warn('Error: write file failure - ' + request.error.name); };

4. SD 卡空間使用率 (“device-storage:sdcard”:{ “access”: “readonly” })

var type = 'sdcard'; var deviceStorage = navigator.getDeviceStorage(type);

if (!deviceStorage) { console.warn('Error: cannot get DeviceStorage for ' + type); return; }

var request = deviceStorage.stat(); request.onsuccess = function(e) { var totalSize = e.target.result.totalBytes; var freeBytes = e.target.result.freeBytes; console.log('totalSize ' + totalSize + ', freeBytes ' + freeBytes); };

request.onerror = function() { console.warn('Error: cannot get stat of SD card - ' + request.error.name); };