moztw.org

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

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

123

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');
});

123456

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" }
}

123456

"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);
};

123456789101112131415161718192021

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); };

  1. 讀取某個 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);
};

1234567891011121314151617181920

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); };

  1. 寫入檔案到 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);
};

1234567891011121314151617181920212223242526272829303132333435

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); };

  1. 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);
};

123456789101112131415161718

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); };