Настройки Android

На платформе Android можно использовать элемент дескриптора приложения android , чтобы добавить информацию в манифест приложения Android, который представляет собой файл свойств приложения, используемый в операционной системе Android. ADT автоматически генерирует файл Manifest.xml при создании пакета APK. AIR задает свойства значений, которые требуются для работы определенных функций. Все остальные свойства, настроенные в разделе android дескриптора приложения AIR, добавляются в соответствующий раздел файла Manifest.xml.

Примечание. Для большинства приложений AIR необходимо настроить разрешения Android, требуемые для приложения, с помощью элемента android . Однако в общем случае не требуется настраивать никакие другие свойства.

Настроить можно только атрибуты, значения которых имеют строковый, целый и логический тип. Настройка ссылок на ресурсы в пакете приложения не поддерживается.

Примечание. Среда выполнения требует установки параметра «минимальная версия SDK» выше 14. Если требуется создать приложение только для более поздних версий, необходимо убедиться, что файл манифеста содержит строку <uses-sdk android:minSdkVersion=""></uses-sdk> с указанием правильной версии.

Зарезервированные настройки манифеста Android

AIR настраивает несколько параметров в созданном манифесте Android, чтобы обеспечить корректную работу приложения и среды выполнения. Можно определить следующие настройки:

Элемент manifest

Следующие атрибуты элемента manifest не доступны для настройки:

  • package

  • android:versionCode

  • android:versionName

  • xmlns:android

Элемент activity

Следующие атрибуты элемента activity не доступны для настройки:

  • android:label

  • android:icon

Элемент application

Следующие атрибуты элемента application не доступны для настройки:

  • android:theme

  • android:name

  • android:label

  • android:windowSoftInputMode

  • android:configChanges

  • android:screenOrientation

  • android:launchMode

Разрешения Android

В соответствии с моделью безопасности Android требуется, чтобы приложения запрашивали разрешение на использование функций, связанных с безопасностью и конфиденциальностью. Эти разрешения необходимо указать при упаковке приложений. Они не могут быть изменены во время выполнения. При установке пользователем приложения операционная система Android сообщает, какие разрешения приложение запрашивает. Если требуемое для функции разрешение не запрашивается, операционная система Android может выдать исключение при попытке приложения получить доступ к функции, но исключение не гарантируется. Исключения передаются средой выполнения в приложение. В режиме безопасного возврата сообщения об ошибках, связанных с разрешениями, добавляются в системный журнал Android

В среде AIR разрешения Android задаются в дескрипторе приложения с помощью элемента android . При добавлении разрешений используется следующий формат (здесь PERMISSION_NAME — это имя разрешения Android):

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.PERMISSION_NAME" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Инструкции по использованию разрешений, настроенные с помощью элемента manifest , добавляются непосредственно в манифест Android.

Для использования функций AIR требуются следующие разрешения:

ACCESS_COARSE_LOCATION
Разрешает приложению доступ к данным о местоположении, предоставляемым сетью WIFI или сотовой сетью, которые получаются через класс Geolocation.

ACCESS_FINE_LOCATION:
Разрешает приложению доступ к данным GPS через класс Geolocation.

ACCESS_NETWORK_STATE и ACCESS_WIFI_STATE:
Разрешает приложению доступ к сведениям о сети через класс NetworkInfo.

CAMERA:
Разрешает приложению доступ к камере.
Примечание. Если запрашивается разрешение на использование функции камеры Android предполагает, что приложению также требуется камера. Если функция камеры является необязательной, добавьте в манифест элемент uses-feature для камеры и установите для атрибута required значение false . См. раздел « Фильтры совместимости Android ».

INTERNET:
Разрешает приложению выполнять запросы по сети. Также разрешает удаленную отладку.

READ_PHONE_STATE:
Разрешает среде выполнения AIR приглушать звук во время телефонных вызовов. Данное разрешение необходимо настроить, если приложение воспроизводит видео в фоновом режиме.

RECORD_AUDIO:
Разрешает приложению доступ к микрофону.

WAKE_LOCK и DISABLE_KEYGUARD
Разрешает приложению предотвращать переход устройства в режим сна с помощью параметров класса SystemIdleMode.

WRITE_EXTERNAL_STORAGE:
Разрешает приложению выполнять запись на внешнюю карту памяти устройства.

Например, чтобы настроить разрешения для приложения, которому требуются все доступные разрешения, в дескриптор приложения можно добавить следующий код:

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
                            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
                            <uses-permission android:name="android.permission.CAMERA" /> 
                            <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
                            <uses-permission android:name="android.permission.INTERNET" /> 
                            <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
                            <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                            <uses-permission android:name="android.permission.WAKE_LOCK" /> 
                            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Пользовательские схемы URI Android

Для запуска приложения AIR с веб-страницы или собственного приложения Android можно применять пользовательскую схему URI. Поддержка пользовательских URI реализована с помощью фильтров намерений, настроенных в манифесте Android, поэтому данный метод недоступен на других платформах.

Для применения пользовательского URI добавьте элемент intent-filter в раздел <android> дескриптора приложения. В следующем примере должны быть указаны оба элемента intent-filter . Измените инструкцию <data android:scheme=" my-customuri "/> в соответствии со строкой URI для пользовательской схемы.

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application> 
                            <activity> 
                            <intent-filter> 
                            <action android:name="android.intent.action.MAIN"/> 
                            <category android:name="android.intent.category.LAUNCHER"/> 
                            </intent-filter> 
                            <intent-filter> 
                            <action android:name="android.intent.action.VIEW"/> 
                            <category android:name="android.intent.category.BROWSABLE"/> 
                            <category android:name="android.intent.category.DEFAULT"/> 
                            <data android:scheme="my-customuri"/> 
                            </intent-filter> 
                            </activity> 
                            </application> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Фильтр намерений указывает операционной системе Android, что приложение доступно для выполнения определенного действия. В случае пользовательского URI это означает, что пользователь нажал на ссылку, использующую данную схему URI (и браузер не знает, как обработать это событие).

Когда приложение вызывается с помощью пользовательского URI, объект NativeApplication отправляет событие invoke . URL ссылки с параметрами запроса помещается в массив arguments объекта InvokeEvent. Можно настроить любое количество фильтров намерений.

Примечание. Ссылки в экземпляре StageWebView не поддерживают открытие URL-адресов, для которых используется пользовательская URI-схема.

Фильтры совместимости Android

Операционная система Android использует количество элементов в файле манифеста приложения для определения того, совместимо ли приложение с данным устройством. Добавление этой информации в манифест не является обязательным. Если эти элементы не включены, приложение может быть установлено на любом устройстве Android. Однако оно не обязательно будет работать на всех устройствах Android. Например, приложение камеры будет не слишком полезно на телефоне без камеры.

Для фильтрации применяются следующие теги манифеста Android:

  • supports-screens

  • uses-configuration

  • uses-feature

  • uses-sdk (в AIR 3+)

Приложения камеры

Если запрашивается разрешение на использование камеры в приложении, Android предполагает, что приложению требуются все функции камеры, включая автофокусировку и вспышку. Если приложению требуются не все функции камеры или камера является необязательной функцией, для камеры необходимо задать различные элементы uses-feature , чтобы указать, какие не являются обязательными. В противном случае пользователи, устройства которых не поддерживают какую-либо из функций или на которых нет камеры, не смогут найти ваше приложение на Android Маркете.

В следующем примере показано, как запросить разрешения для камеры и указать, что все функции камеры являются необязательными:

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.CAMERA" /> 
                                <uses-feature android:name="android.hardware.camera" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.flash" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

Приложения звукозаписи

Если запрашивается разрешение для записи звука, Android предполагает, что приложению требуется микрофон. Если функция запись звука является необязательной, можно добавить тег uses-feature и указать, что микрофон не требуется. В противном случае пользователи, на устройствах которых нет микрофона, не смогут найти ваше приложение на Android Маркете.

В следующем примере показано, как запросить разрешение на использование микрофона и указать, что наличие микрофон не является обязательным:

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                                <uses-feature android:name="android.hardware.microphone" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

Расположение для установки

Чтобы разрешить установку или перенос приложения на внешнюю карту памяти, задайте для атрибута installLocation элемента Android manifest значение auto или preferExternal :

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest android:installLocation="preferExternal"/> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Операционная система Android не гарантирует, что приложение будет установлено во внешнюю память. Пользователь может переносить приложение из внутренней во внешнюю память и обратно с помощью системных настроек.

Даже когда приложение установлено во внешнюю память, кэш приложение и пользовательские данные, включая содержимое каталога app-storage, общие объекты и временные файлы, по-прежнему остаются во внутренней памяти. Чтобы не занимать слишком большой объем внутренней памяти, внимательно выбирайте данные, которые будут помещены в каталог хранилища приложения. Большие объемы данных следует сохранять на SD-карте, используя местоположения File.userDirectory или File.documentsDirectory (которые ссылаются на корневой каталог SD-карты на Android).

Включение проигрывателя Flash Player и других подключаемых модулей в объекте StageWebView

В ОС Android 3.0 и более поздних версий приложение должно включать аппаратное ускорение в элементе приложения Android, чтобы содержимое подключаемого модуля отображалось в объекте StageWebView. Чтобы включить визуализацию для подключаемого модуля, задайте атрибуту android:hardwareAccelerated элемента application значение true :

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application android:hardwareAccelerated="true"/> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Глубина цвета

В AIR 3 и более поздних версий среда выполнения настраивает дисплей для визуализации цветов с глубиной 32 бита. В более ранних версиях AIR среда выполнения использует глубину цвета 16 бит. Чтобы указать среде выполнения на необходимость использования глубины цвета 16 бит, используйте элемент <colorDepth> дескриптора приложения.

<android> 
                            <colorDepth>16bit</colorDepth> 
                            <manifestAdditions>...</manifestAdditions> 
                            </android>

При использовании глубины цвета 16 бит увеличивается скорость визуализации, но ухудшается точность цветопередачи.