Вывод погоды на LockScreen. Источники данныхСтруктурированные данные в Android хранятся с использованием двух механизмов.
•
Базы данных SQLite. Если нужно хранить управляемую, структурированную информацию,
можете использовать библиотеку SQLite для работы с реляционными базами данных. Любое приложение может
создавать свои собственные базы данных, над которыми оно будет иметь полный контроль.
•
Источники данных. Источники данных предоставляют общий, строго определенный интерфейс для обмена данными.
В данном случае нас интересует второй механизм, а именно -
работа с источниками данных.
Лирическое отступление
Источники данных предоставляют интерфейс для публикации и потребления данных, основанный
на простой адресной модели URI, используя схему content://.
Этот механизм позволяет отделить логику приложения от данных, делая ваши программы нечувствительными к источникам,
из которых поступает информация, путем скрытия базового источника с данными.
Общие Источники данных могут использоваться для получения результатов запросов,
обновления или удаления существующих записей, а также для добавления новых.
Любое приложение с соответствующими полномочиями может добавлять, удалять или изменять данные,
принадлежащие другому приложению, включая стандартные базы данных Android.
Многие стандартные базы данных доступны в качестве Источников данных и могут использоваться
сторонними приложениями. Сюда входят телефонные контакты, хранилище информации и другие стандартные базы данных,
Публикуя собственные данные в виде Источников данных, вы получаете шанс (и даете его другим разработчикам)
объединять и расширять их с помощью новых приложений.
После того как разработчик создает свой
Источник данных, он добавляет его в манифест приложения.
Базовый путь URI указывается в теге
authorities файла
AndroidManifest.xml, который находится в
apk приложения:
В примере для
GenieWidget базовый путь
URI, указанный в
AndroidManifest.xml будет следующий:
com.google.android.apps.genie.geniewidget.weatherФормат файла AndroidManifest.xmlДекомпиляция системных XML.Хотя файл и имеет расширение
xml, он не совсем текстовый.
Подробно формат рассмотрен
здесьТам же есть небольшая, но очень полезная утилита для декомпиляции
AndroidManifest.xml.
Можно сделать то-же самое и
APKTools, но для его работы нужно будет скачать и JDK...
Для данной утилиты ничего этого не надо. Работает из командной строки, по умолчанию выводит декомпилированное содержимое в окно консоли.
Для упрощения работы сделал bat файл.
Содержимое архива распаковать в любую папку на компьютере, скопировать туда же исходные
xml (можно несколько сразу).
Запустить decodexml.bat
Декомпилированные файлы будут иметь расширение
*.txt и отлично редактируются в любом текстовом редакторе.
Скачать: androidxml_1.0.0.1.zip ( 143.27 КБ )
Применение в lockscreen\advance\manifest.xmlURI доступа указывается в параметре
uriFormat локскрина:
<!-- content provider binder for google weather -->
<VariableBinders>
<ContentProviderBinder
uriFormat="content://com.google.android.apps.genie.geniewidget.weather/weather/current/%d"
uriParas="#time_sys"
columns="iconResId,location,temperature,lowTemperature,highTemperature,description"
countName="hasweather">
<Variable name="weather_id" type="int" column="iconResId"/>
<Variable name="weather_location" type="string" column="location"/>
<Variable name="weather_temperature" type="int" column="temperature"/>
<Variable name="weather_lowTemperature" type="int" column="lowTemperature"/>
<Variable name="weather_highTemperature" type="int" column="highTemperature"/>
<Variable name="weather_description" type="string" column="description"/>
</ContentProviderBinder>
</VariableBinders>
Пояснения:
Путь после content://com.google.android.apps.genie.geniewidget.weather - запрос к базе данных.
Параметр columns определяет возвращаемые по запросу поля базы данных, в которых хранится полученная приложением информация.
Параметры, определяемые в <Variable name= - переменные, синонимы существующих в базе данных приложения имен полей данных.
Как правильно составлять запросы - я не нашел и буду признателен всем, кто укажет, как. Скорее всего - при анализе базы в
SQLite Editor.
(у меня SQLite Editor не работает, ни одна версия :( )
Хранящиеся в базе приложения данные (имена полей, тип данных) можно посмотреть, если открыть базу данных приложения в
SQLite Editor.
Сообщение отредактировал NuttShell - 19.05.13, 08:26