Content API содержит следующие компоненты:
Content API предоставляет функциональность для поиска контента, содержащего изображения, видео, музыку и др. Имеется возможность искать специфический контент с помощью фильтров. API также поддерживает настройки атрибутов конкретного контента.
Тип хранилища, в котором размещается контент хранится в перечислении ContentDirectoryStorageType.
enum ContentDirectoryStorageType { "INTERNAL", "EXTERNAL" };
Тип контента определяется в перечислении ContentType.
enum ContentType { "IMAGE", "VIDEO", "AUDIO", "OTHER" };
Тип аудиоконтента описывается в перечислении AudioContentLyricsType.
enum AudioContentLyricsType {"SYNCHRONIZED", "UNSYNCHRONIZED"};
Ориентация изображения описывается в перечислении ImageContentOrientation.
enum ImageContentOrientation {"NORMAL", "FLIP_HORIZONTAL", "ROTATE_180", "FLIP_VERTICAL", "TRANSPOSE", "ROTATE_90", "TRANSVERSE", "ROTATE_270" };
Идентификатор контента определяется типом ContentId.
Идентификатор каталога, в котором хранится контент определяется типом ContentDirectoryId.
Тип плейлиста определяется типом PlaylistId.
Определяет тип экземпляра объекта Tizen.
Объект tizen.content предоставляет доступ к функциональности модуля Content.
Интерфейс ContentManager предоставляет методы для извлечения и манипуляции контентом.
Синхронное обновление атрибутов в базе данных контента
Асинхронное обновление пакета атрибутов в базе данных контента
Дает список каталогов, в которых содержится контент
Находит контент, удовлетворяющий условиям, заданным с помощью фильтра.
Этот пример описан на сайте Tizen (https://developer.tizen.org/dev-guide/2.3.0/org.tizen.web.apireference/html/device_api/mobile/tizen/content.html).
Создадим новый проект Tizen Web Application. Назовем проект content. Вначале нужно добавить привилегии в файл config.xml:
Запишем в файл index.html следующий код:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> <meta name="description" content="A single-page template generated by Tizen Web IDE"/> <title>Tizen Web IDE - Tizen - jQuery Mobile - Single-Page</title> <link rel="stylesheet" href="./css/jquery.mobile-1.3.2.css"/> <script type="text/javascript" src="./js/jquery-1.9.1.js"></script> <script type="text/javascript" src="./js/jquery.mobile-1.3.2.js"></script> <script type="text/javascript" src="./js/main.js"></script> <link rel="stylesheet" href="./css/style.css" /> <script type="text/javascript"> // The following example retrieves all songs from the album "The Joshua Tree", by artist "U2", ordered by the name. var count = 100; var offset = 0; var sortMode = new tizen.SortMode("name", "ASC"); var artistFilter = new tizen.AttributeFilter("artists", "EXACTLY", "U2"); var albumFilter = new tizen.AttributeFilter("album", "EXACTLY", "The Joshua Tree"); var filter = new tizen.CompositeFilter("INTERSECTION", [albumFilter, artistFilter]); function errorCB(err) { console.log( 'The following error occurred: ' + err.name); } function printContent(content, index, contents) { console.log('Name: ' + content.name + ' Title: ' + content.title + 'URL: ' + content.contentURI + 'MIME: ' + content.mimeType); } function findCB(contents) { console.log('The Joshua Tree by U2:'); contents.forEach(printContent); // Increase the offset as much as the count and then find content again. if (contents.length === count) { offset += count; tizen.content.find(findCB, errorCB, null, filter, sortMode, count, offset); } } tizen.content.find(findCB, errorCB, null, filter, sortMode, count, offset); </script> </head> <body> <div data-role="page" > <div data-role="header" data-position="fixed" data-tap-toggle="false" > <h1>Single-page application </h1> </div><!-- /header --> <div data-role="content" > <p>This is a single page boilerplate template that you can copy to build your first jQuery Mobile page.</p> </div><!-- /content --> <div data-role="footer" data-position="fixed" data-tap-toggle="false" > <h4>Footer content</h4> </div><!-- /footer --> </div><!-- /page --> </body> </html>
Когда приложение создает или обновляет содержание, этот метод позволяет сканировать его, а затем вставить или обновить содержание в базе данных контента.
Определяет слушатель, получающий уведомления об изменении контента.
Сбрасывает слушателя для того, чтобы отписаться от получения уведомлений об изменении контента.
Получает все плейлисты.
Создает новый плейлист
Создадим новый проект content1, добавим в него те же привилегии, что и в первом примере. В файле index.html добавим следующий скрипт:
<script type="text/javascript"> var gPlaylists; var gPlaylist; function getPlaylistsFail(err) { console.log("getPlaylists failed: " + err.message); } function getPlaylistsSuccess(playlists) { var cur, i; gPlaylists = playlists; for(i = 0; i < gPlaylists.length; ++i) { cur = gPlaylists[i]; console.log("[" + i + "] name:" + cur.name + " num tracks:" + cur.numberOfTracks); } } function findSuccess(contents) { if (contents.length > 0) { gPlaylist.add(contents[0]); } tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail); } function findFail(err) { console.log("find FAIL: " + err.message); } function createSuccess(playlist) { console.log("create SUCCESS"); gPlaylist = playlist; tizen.content.find(findSuccess, findFail, null, new tizen.AttributeFilter("type", "EXACTLY", "AUDIO")); } function createFail(err) { console.log("create FAIL: " + err.message); } tizen.content.createPlaylist("My new playlist", createSuccess, createFail); </script>
Удалят плейлист.
Создадим новый проект content2, добавим в него те же привилегии, что и в первом примере. В файле index.html добавим следующий скрипт:
<script type="text/javascript"> var gPlaylists; function removePlaylistSuccess() { console.log("removePlaylist SUCCESS"); } function removePlaylistFail(err) { console.log("removePlaylist FAIL: " + err); } function getPlaylistsFail(err) { console.log("getPlaylists failed: " + err); } function getPlaylistsSuccess(playlists) { var cur, i; gPlaylists = playlists; for(i = 0; i < gPlaylists.length; ++i) { cur = gPlaylists[i]; console.log("[" + i + "] name:" + cur.name + " num tracks:" + cur.numberOfTracks); } if(gPlaylists.length < 1) { console.log("Please add at least 1 playlist"); return; } console.log("will remove playlist at index [0] name:" + gPlaylists[0].name); tizen.content.removePlaylist(gPlaylists[0].id, removePlaylistSuccess, removePlaylistFail); } tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail); </script>
Этот API предоставляет методы для асинхронной загрузки контента по URL в хранилище.
Набор полей HTTP-заголовков определяется в типе DownloadHTTPHeaderFields
Состояние загрузки определяется в перечислении DownloadState
enum DownloadState {"QUEUED", "DOWNLOADING", "PAUSED", "CANCELED", "COMPLETED", "FAILED"};
Тип сети описывается в перечислении DownloadNetworkType.
enum DownloadNetworkType { "CELLULAR", "WIFI", "ALL" };
Интерфейс DownloadRequest определяет объект запроса загрузки.
Пример полей заголовков HTTP-запроса.
var req = new tizen.DownloadRequest("http://download.tizen.org/tools/README.txt"); req.httpHeader["Pragma"] = "no-cache"; req.httpHeader["Cookie"] = "version=1; Skin=new"; req.httpHeader["X-Agent"] = "Tizen Sample App";
Интерфейс DownloadManager обрабатывает запросы на загрузку. О каждом шаге операции загрузки можно получить уведомление через обратные вызовы.
Ниже приводится пример использования DownloadManager.
<script type="text/javascript"> // Check if Download API is supported not on a device. var download_api_capability = tizen.systeminfo.getCapability("http://tizen.org/feature/download"); if (download_api_capability === false) { console.log("Download API is not supported on this device."); //return; } var listener = { onprogress: function(id, receivedSize, totalSize) { console.log('Received with id: ' + id + ', ' + receivedSize + '/' + totalSize); }, onpaused: function(id) { console.log('Paused with id: ' + id); }, oncanceled: function(id) { console.log('Canceled with id: ' + id); }, oncompleted: function(id, fullPath) { console.log('Completed with id: ' + id + ', full path: ' + fullPath); }, onfailed: function(id, error) { console.log('Failed with id: ' + id + ', error name: ' + error.name); } }; // Starts downloading the file from the Web with the corresponding callbacks. var downloadRequest = new tizen.DownloadRequest("http://download.tizen.org/tools/README.txt", "documents"); var downloadId = tizen.download.start(downloadRequest, listener); // If you want to download a large file through Wi-Fi, var wifi_capability = tizen.systeminfo.getCapability("http://tizen.org/feature/network.wifi"); var wifiDownloadRequest = new tizen.DownloadRequest("http://download.tizen.org/tools/archive/14.02.2/Ubuntu_12.04/qemu_1.6.0rc3.orig.tar.gz", "downloads", null, "WIFI"); if (wifi_capability === true) { var downlodId_wifi = tizen.download.start(wifiDownloadRequest, listener); } else { // If you call tizen.download.start(), NotSupportedError will be thrown. console.log("This device doesn't support Download API through Wi-Fi."); } </script>
Exif API предоставляет интерфейсы и методы для манипулирования данными Exif из файла в формате JPEG. Объект ExifManager предоставляет методы для извлечения объекта ExifInformation из файла JPEG и сохранения данных Exif объекта ExifInformation в файле JPEG. Объект ExifInformation обеспечивает функциональность для получения и установки атрибутов Exif в соответствующий тег Exif.
Режим баланса белого изображения описывается в перечислении WhiteBalanceMode.
enum WhiteBalanceMode { "AUTO", "MANUAL" };
Программа баланса экспозиции описывается в перечислении ExposureProgram.
enum ExposureProgram {"NOT_DEFINED", "MANUAL", "NORMAL", "APERTURE_PRIORITY", "SHUTTER_PRIORITY", "CREATIVE_PROGRAM", "ACTION_PROGRAM", "PORTRAIT_MODE", "LANDSCAPE_MODE"};
Объект tizen.exif позволяет получить доступ к данным Exif файла в формате.
Ниже приводится пример использования объекта tizen.exif.
<script type="text/javascript"> // Defines success callback function onSuccess(exifInfo) { console.log("success to get Exif information object"); } // Defines error callback function onError(error) { console.log("error occurred: " + error.name); } function resolveSuccess(file) { tizen.exif.getExifInfo(file.toURI(), onSuccess, onError); } function resolveFail(error) { console.log("error occurred: " + error.name); } tizen.filesystem.resolve("images/flower.jpg", resolveSuccess, resolveFail); </script>