Spec-Zone.ru › Cordova 6

Руководство по платформе Android

Это руководство показывает, как настроить среду SDK для развертывания приложений Cordova на устройствах Android и как при желании использовать инструменты командной строки, ориентированные на Android, в процессе разработки. Вам необходимо установить Android SDK независимо от того, хотите ли вы использовать эти инструменты командной строки, ориентированные на платформу, или кроссплатформенную командную строку Cordova для разработки. Сравнение этих двух путей разработки см. в Обзоре. Подробности о командной строке см. в Справочнике по Cordova CLI.

Требования и поддержка

Cordova для Android требует Android SDK, который можно установить на OS X, Linux или Windows. См. Системные требования Android SDK. Последний пакет Android Cordova поддерживает до Android уровня API 23. Поддерживаемые уровни API Android для предыдущих версий cordova-android можно найти в этой таблице:

Версия cordova-android Поддерживаемые уровни API Android
5.X.X 14 - 23
4.1.X 14 - 22
4.0.X 10 - 22
3.7.X 10 - 21

Обратите внимание, что перечисленные здесь версии относятся к пакету Android Cordova, cordova-android, а не к Cordova CLI. Чтобы определить, какая версия пакета Android Cordova установлена в вашем проекте Cordova, выполните команду cordova platform ls в каталоге, содержащем ваш проект.

Как общее правило, версии Android, которые опускаются ниже 5% на панели мониторинга распределения Google, более не поддерживаются Cordova.

Установка требований

Java Development Kit (JDK)

Установите Java Development Kit (JDK) 7 или более позднюю версию.

При установке на Windows также необходимо установить JAVA_HOME переменную среды в соответствии с путем установки JDK (см. Настройка переменных среды)

Android SDK

Установите Инструменты Android SDK Standalone или Android Studio. Продолжайте с Android Studio, если планируете разрабатывать новые плагины Cordova для Android или использовать родные инструменты для запуска и отладки платформы Android. В противном случае, инструменты Android Standalone SDK достаточно для сборки и развертывания приложений Android.

Подробные инструкции по установке доступны в ссылках на установку выше.

Добавление пакетов SDK

После установки Android SDK необходимо также установить пакеты для нужного уровня API. Рекомендуется установить самую высокую версию SDK, которую поддерживает ваша версия cordova-android (см. выше).

Откройте Android SDK Manager (например, выполните android из терминала) и убедитесь, что установлены следующие компоненты:

  1. Android Platform SDK для вашей целевой версии Android
  2. Инструменты сборки Android SDK версии 19.1.0 или выше
  3. Android Support Repository (находится в разделе "Extras")

Дополнительные сведения см. в документации Android по установке пакетов SDK.

Настройка переменных среды

Инструменты Cordova CLI требуют настройки некоторых переменных среды для правильной работы. Командная строка CLI попытается настроить эти переменные за вас, но в некоторых случаях вам может потребоваться настроить их вручную. Следующие переменные должны быть обновлены:

  1. Установите JAVA_HOME переменную среды в расположение вашей установки JDK
  2. Установите ANDROID_HOME переменную среды в расположение вашей установки Android SDK
  3. Рекомендуется также добавить каталоги tools и platform-tools Android SDK в вашу PATH

OS X и Linux

На Mac или Linux можно использовать текстовый редактор для создания или изменения файла ~/.bash_profile. Чтобы установить переменную среды, добавьте строку, использующую export, как показано ниже (замените путь вашим локальным расположением):

export ANDROID_HOME=/Development/android-sdk/

Чтобы обновить вашу PATH, добавьте строку, похожую на следующую (замените пути на расположение вашей локальной установки Android SDK):

export PATH=${PATH}:/Development/android-sdk/platform-tools:/Development/android-sdk/tools

Перезагрузите терминал, чтобы увидеть это изменение, или выполните следующую команду:

$ source ~/.bash_profile

Windows

Эти шаги могут отличаться в зависимости от установленной версии Windows. Закройте и снова откройте все окна командной строки после внесения изменений, чтобы увидеть их отражение

  1. Нажмите на меню Пуск в левом нижнем углу рабочего стола

  2. В строке поиска найдите Переменные среды и выберите Изменить переменные среды системы из появившихся вариантов

  3. В появившемся окне нажмите кнопку Переменные среды

Для создания новой переменной среды:
  1. Нажмите Создать... и введите имя и значение переменной
Для установки PATH:
  1. Выберите переменную PATH и нажмите Изменить.

  2. Добавьте записи для соответствующих расположений в PATH. Например (замените пути на расположение вашей локальной установки Android SDK):

    C:\Development\android-sdk\platform-tools
    C:\Development\android-sdk\tools
    

Настройка проекта

Настройка эмулятора

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

После правильной настройки вашего AVD вы должны увидеть его, выполнив эту команду в проекте Cordova:

$ cordova run --list

Настройка Gradle

Начиная с cordova-android@4.0.0, Cordova для проектов Android строятся с использованием Gradle. Для инструкций по сборке с помощью Ant обратитесь к более старым версиям документации.

Настройка свойств Gradle

Можно настроить процесс сборки Gradle, задав значения определенных свойств Gradle, которые доступны Cordova. Доступны следующие свойства:

Свойство Описание
cdvBuildMultipleApks Если это свойство задано, будут сгенерированы несколько файлов APK: по одному для каждой поддерживаемой библиотекой платформы (x86, ARM и т. д.). Это может быть важно, если ваш проект использует большие нативные библиотеки, так как это может значительно увеличить размер сгенерированного APK. Если не задано, будет сгенерирован один APK, который можно использовать на всех устройствах
cdvVersionCode Переопределяет значение versionCode, установленное в AndroidManifest.xml
cdvReleaseSigningPropertiesFile По умолчанию: release-signing.properties
Путь к файлу .properties, содержащему информацию о подписи для релизных сборок (см. Подпись приложения)
cdvDebugSigningPropertiesFile По умолчанию: debug-signing.properties
Путь к файлу .properties, содержащему информацию о подписи для отладочных сборок (см. Подпись приложения). Полезно, если вам нужно поделиться ключом подписи с другими разработчиками
cdvMinSdkVersion Переопределяет значение minSdkVersion, установленное в AndroidManifest.xml. Полезно при создании нескольких APK на основе версии SDK
cdvBuildToolsVersion Переопределяет автоматически обнаруженное значение android.buildToolsVersion
cdvCompileSdkVersion Переопределяет автоматически обнаруженное значение android.compileSdkVersion

Эти свойства можно установить четырьмя способами:

  1. Установив переменные среды, например:

    $ export ORG_GRADLE_PROJECT_cdvMinSdkVersion=20
    $ cordova build android
    
  2. Используя флаг --gradleArg в ваших командах Cordova build или run:

    $ cordova run android -- --gradleArg=-PcdvMinSdkVersion=20
    
  3. Поместив файл с именем gradle.properties в папку вашей платформы Android (<your-project>/platforms/android) и установив свойства в нём так:

    # In <your-project>/platforms/android/gradle.properties
    cdvMinSdkVersion=20
    
  4. Расширив build.gradle с помощью файла build-extras.gradle и установив свойство, как показано ниже:

    // In <your-project>/platforms/android/build-extras.gradle
    ext.cdvMinSdkVersion = 20
    

Последние два варианта оба подразумевают включение дополнительного файла в папку платформы Android. Как правило, не рекомендуется редактировать содержимое этой папки, так как эти изменения могут быть легко потеряны или перезаписаны. Вместо этого эти два файла следует скопировать из другого места в эту папку как часть команды сборки, используя before_build зацепку.

Расширение build.gradle

Если вам нужно настроить build.gradle, вместо прямого редактирования, следует создать файл с именем build-extras.gradle. Этот файл будет включён основным build.gradle при наличии. Этот файл должен быть помещён в каталог платформы Android (<your-project>/platforms/android), поэтому рекомендуется скопировать его через скрипт, прикреплённый к before_build зацепке.

Вот пример:

// Example build-extras.gradle
// This file is included at the beginning of `build.gradle`
ext.cdvDebugSigningPropertiesFile = '../../android-debug-keys.properties'

// When set, this function allows code to run at the end of `build.gradle`
ext.postBuildExtras = {
    android.buildTypes.debug.applicationIdSuffix = '.debug'
}

Обратите внимание, что плагины также могут включать build-extras.gradle файлы через:

<framework src="some.gradle" custom="true" type="gradleReference" />

Установка версии кода

Чтобы изменить код версии сгенерированного APK вашего приложения, задайте атрибут android-versionCode в элементе виджета вашего приложения в файле config.xml. Если android-versionCode не задано, код версии будет определяться по атрибуту version. Например, если версия MAJOR.MINOR.PATCH:

versionCode = MAJOR * 10000 + MINOR * 100 + PATCH

Если в вашем приложении включена переменная cdvBuildMultipleApks Gradle (см. Настройка свойств Gradle), код версии приложения также будет умножен на 10, чтобы последняя цифра кода могла использоваться для указания архитектуры, для которой был создан apk. Это умножение произойдёт независимо от того, взято ли значение кода версии из атрибута android-versionCode или сгенерировано с помощью version. Имейте в виду, что некоторые плагины, добавленные в ваш проект (включая cordova-plugin-crosswalk-webview), могут автоматически установить эту переменную Gradle.

Обратите внимание: при обновлении свойства android-versionCode не следует увеличивать код версии, взятый из скомпилированных apk. Вместо этого вы должны увеличивать код на основе значения в файле config.xml в атрибуте android-versionCode. Это происходит потому, что свойство cdvBuildMultipleApks умножает код версии на 10 в скомпилированных apk, и, таким образом, использование этого значения приведёт к тому, что следующий код версии будет в 100 раз больше исходного и т. д.

Подпись приложения

Сначала ознакомьтесь с требованиями к подписи приложений Android.

Использование флагов

Для подписи приложения необходимы следующие параметры:

Параметр Флаг Описание
Хранилище ключей --keystore Путь к двоичному файлу, который может хранить набор ключей
Пароль хранилища ключей --storePassword Пароль к хранилищу ключей
Псевдоним --alias Идентификатор, указывающий на закрытый ключ, используемый для подписи
Пароль --password Пароль для указанного закрытого ключа
Тип хранилища ключей --keystoreType По умолчанию: определение по расширению файла
Либо pkcs12, либо jks

Эти параметры можно указать, используя аргументы командной строки выше для команд Cordova CLI build или run.

Примечание: Для обозначения платформно-специфичных аргументов следует использовать двойные --, например:

cordova run android --release -- --keystore=../my-release-key.keystore --storePassword=password --alias=alias_name --password=password.

Использование build.json

В качестве альтернативы, вы можете указать их в файле конфигурации сборки (build.json) с помощью аргумента --buildConfig для тех же команд. Вот пример файла конфигурации сборки:

{
    "android": {
        "debug": {
            "keystore": "../android.keystore",
            "storePassword": "android",
            "alias": "mykey1",
            "password" : "password",
            "keystoreType": ""
        },
        "release": {
            "keystore": "../android.keystore",
            "storePassword": "",
            "alias": "mykey2",
            "password" : "password",
            "keystoreType": ""
        }
    }
}

storePassword и keyPassword необязательны и будут запрошены, если пропущены.

Для подписи релизной версии пароли можно исключить, и система сборки запросит пароль.

Также поддерживается смешанное использование аргументов командной строки и параметров в build.json. Значения из аргументов командной строки будут иметь приоритет. Это может быть полезно для указания паролей в командной строке.

Использование Gradle

Вы также можете указать свойства подписи, включив файл .properties и указав на него с помощью свойств Gradle cdvReleaseSigningPropertiesFile и cdvDebugSigningPropertiesFile (см. Настройка свойств Gradle). Файл должен выглядеть так:

storeFile=relative/path/to/keystore.p12
storePassword=SECRET1
storeType=pkcs12
keyAlias=DebugSigningKey
keyPassword=SECRET2

storePassword и keyPassword являются необязательными и будут запрошены, если пропущены.

Отладка

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

Открытие проекта в Android Studio

Проекты Cordova для Android можно открыть в Android IDE, Android Studio. Это может быть полезно, если вы хотите использовать встроенные инструменты отладки/профилирования Android Studio или если вы разрабатываете плагины Android. Обратите внимание, что при открытии проекта в Android Studio рекомендуется НЕ редактировать код в IDE. Это приведет к редактированию кода в папке platforms вашего проекта (а не www). Изменения могут быть перезаписаны. Вместо этого редактируйте папку www и скопируйте изменения, выполнив cordova build.

Разработчики плагинов, желающие редактировать свой родной код в IDE, должны использовать флаг --link при добавлении плагина в проект с помощью cordova plugin add. Это свяжет файлы, так что изменения в файлах плагина в папке platforms будут отражаться в папке исходного кода плагина (и наоборот).

Для открытия проекта Cordova для Android в Android Studio:

  1. Запустите Android Studio.

  2. Выберите Импорт проекта (Eclipse ADT, Gradle и т. д.).

  3. Выберите каталог Android платформы в вашем проекте (<your-project>/platforms/android).

  4. На вопрос Gradle Sync можно просто ответить Да.

После завершения импорта вы сможете создавать и запускать приложение непосредственно из Android Studio. Дополнительную информацию см. в Обзоре Android Studio и Создании и запуске из Android Studio.

Рабочий процесс, ориентированный на платформу

cordova-android включает ряд скриптов, которые позволяют использовать платформу без полного использования Cordova CLI. Этот путь разработки может предоставить вам больше вариантов развития в определённых ситуациях по сравнению с кроссплатформенным CLI Cordova. Например, вам может потребоваться использовать инструменты оболочки при развертывании пользовательского WebView Cordova наряду с нативными компонентами. Перед использованием этого пути разработки необходимо настроить среду Android SDK, как описано в разделе Требования и поддержка выше.

Для каждого из описанных ниже скриптов обратитесь к Справочнику по Cordova CLI для получения дополнительной информации об их аргументах и использовании. Каждый скрипт имеет имя, соответствующее команде CLI. Например, cordova-android/bin/create эквивалентно cordova create.

Для начала скачайте пакет cordova-android с npm или Github.

Для создания проекта с помощью этого пакета запустите скрипт create в папке bin:

$ cordova-android/bin/create ...

Созданный проект будет содержать папку с именем cordova внутри неё, которая содержит скрипты для команд Cordova, специфичных для проекта (например, run, build, и т. д.). Кроме того, структура проекта будет отличаться от обычного проекта Cordova. В частности, /www перемещён в /assets/www.

Для установки плагинов в этом проекте используйте Утилиту Cordova Plugman.

Обновление

Обратитесь к статье здесь за инструкциями по обновлению вашей версии cordova-android.

Руководство по жизненному циклу

Cordova и Android

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

В отличие от этого, приложения Cordova на платформе Android выполняются внутри Webview, встроенной в одну активность Android. Жизненный цикл этой активности доступен для вашего приложения через события документа, которые генерируются. События не гарантированно соответствуют жизненному циклу Android, но они могут служить руководством для сохранения и восстановления состояния. Эти события примерно соответствуют следующим вызовам Android:

Событие Cordova Приблизительный эквивалент Android Значение
deviceready onCreate() Приложение запускается (не из фонового режима)
pause onPause() Приложение переходит в фоновый режим
resume onResume() Приложение возвращается в фоновый режим

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

Что отличает Android?

В Android ОС может выбрать уничтожение активностей в фоновом режиме, чтобы освободить ресурсы, если на устройстве, на котором выполняется приложение, мало памяти. К сожалению, когда активность, содержащая ваше приложение, уничтожается, Webview, в котором существует ваше приложение, также будет уничтожена. Любое состояние, которое поддерживает ваше приложение, в этом случае будет потеряно. Когда пользователь возвращается к вашему приложению, активность и Webview будут повторно созданы ОС, но состояние для вашего приложения Cordova не будет автоматически восстановлено. По этой причине крайне важно, чтобы ваше приложение было знакомо с событиями жизненного цикла и поддерживало любое соответствующее состояние, чтобы убедиться, что контекст пользователя в вашем приложении не потеряется, когда он покинет приложение.

Когда это может произойти?

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

Однако есть второй (и гораздо более тонкий) случай, который могут вводить некоторые плагины. Как отмечалось выше, приложения Cordova обычно ограничены единственной активностью, содержащей Webview. Однако существуют случаи, когда плагины могут запускать другие активности и временно переводить активность Cordova в фоновый режим. Эти другие активности обычно запускаются для выполнения определенной задачи с помощью нативного приложения, установленного на устройстве. Например, плагин Apache camera запускает любую нативную активность камеры, установленную на устройстве, для того, чтобы сделать фотографию. Повторное использование установленного приложения камеры таким образом позволяет вашему приложению ощущаться как нативное приложение, когда пользователь пытается сделать фотографию. К сожалению, когда нативная активность переводит ваше приложение в фоновый режим, существует вероятность, что операционная система его уничтожит.

Для более ясного понимания этого второго случая давайте рассмотрим пример с использованием плагина камеры. Представьте себе приложение, которое требует от пользователя сделать фото профиля. Поток событий в приложении, когда все идет по плану, будет выглядеть примерно так:

  1. Пользователь взаимодействует с вашим приложением и хочет сделать фотографию
  2. Плагин камеры запускает нативную активность камеры
    • Активность Cordova переходит в фоновый режим (срабатывает событие паузы)
  3. Пользователь делает фотографию
  4. Активность камеры завершается
    • Активность Cordova переходит в фоновый режим (срабатывает событие возобновления)
  5. Пользователь возвращается к вашему приложению с того места, где он остановился

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

  1. Пользователь взаимодействует с вашим приложением и хочет сделать фотографию
  2. Плагин камеры запускает нативную активность камеры
    • Операционная система уничтожает активность Cordova (срабатывает событие паузы)
  3. Пользователь делает фотографию
  4. Активность камеры завершается
    • Операционная система воссоздаёт активность Cordova (срабатывают события deviceready и возобновления)
  5. Пользователь недоумевает, почему он внезапно вернулся к экрану входа в ваше приложение

В этом случае операционная система уничтожила приложение в фоновом режиме, и приложение не сохранило своё состояние в рамках жизненного цикла. При возвращении пользователя в приложение Webview был воссоздан, и приложение, по-видимому, перезапустилось с нуля (отсюда и недоумение пользователя). Эта последовательность событий эквивалентна тому, что происходит при нажатии кнопки «Домой» или переключении пользователем приложений. Ключ к предотвращению описанного выше опыта заключается в подписке на события и надлежащем сохранении состояния в рамках жизненного цикла активности.

Уважение жизненного цикла

В примерах выше отмечаются события javascript, которые срабатывают. Эти события являются вашим шансом сохранить и восстановить состояние вашего приложения. Вы должны зарегистрировать обратные вызовы в функции bindEvents вашего приложения, которые реагируют на события жизненного цикла, сохраняя состояние. Какую информацию вы сохраняете и как вы её сохраняете, зависит от вас, но вы должны быть уверены, что сохраните достаточно информации, чтобы восстановить пользователя ровно в том месте, где он остановился, когда он вернется в ваше приложение.

В примере выше есть дополнительный фактор, который применим только ко второму обсуждаемому случаю (то есть когда плагин запускает внешнюю активность). Не только состояние приложения было потеряно, когда пользователь закончил делать фотографию, но и сама фотография, которую пользователь сделал. Обычно эта фотография доставлялась в ваше приложение через обратный вызов, который был зарегистрирован с плагином камеры. Однако, когда Webview был уничтожен, этот обратный вызов был утерян навсегда. К счастью, cordova-android 5.1.0 и выше предоставляют способ получения результата вызова плагина при возобновлении приложения.

Получение результатов обратного вызова плагина (cordova-android 5.1.0+)

Когда операционная система уничтожает активность Cordova, которая была переведена в фоновый режим плагином, все ожидающие обратные вызовы также теряются. Это означает, что если вы передали обратный вызов плагину, который запустил новую активность (например, плагину камеры), этот обратный вызов НЕ будет вызван при повторном создании приложения. Однако начиная с cordova-android 5.1.0, в нагрузке события resume будут содержаться любые ожидающие результаты плагина от запроса плагина, который запустил внешнюю активность, сделанного до уничтожения активности.

Нагрузка для события resume соответствует следующему формату:

{
    action: "resume",
    pendingResult: {
        pluginServiceName: string,
        pluginStatus: string,
        result: any
    }
}

Поля этой нагрузки определяются следующим образом:

  • pluginServiceName: Имя плагина, возвращающего результат (например, "Камера"). Его можно найти в теге <name> файла plugin.xml плагина
  • pluginStatus: Статус вызова плагина (см. ниже)
  • result: Результат вызова плагина

Возможные значения для pluginStatus в поле pendingResult включают следующие:

  • "OK" - Вызов плагина выполнен успешно
  • "No Result" - Вызов плагина завершен без результата
  • "Error" - Вызов плагина завершен с общей ошибкой
  • Другие различные ошибки
    • "Class not found"
    • "Illegal access"
    • "Instantiation error"
    • "Malformed url"
    • "IO error"
    • "Invalid action"
    • "JSON error"

Обратите внимание, что плагин самостоятельно определяет содержимое поля result и значение возвращаемого pluginStatus. Обратитесь к API используемого плагина, чтобы узнать, что должны содержать эти поля и как использовать их значения.

Пример

Ниже представлен краткий пример приложения, использующего события resume и pause для управления состоянием. В качестве примера используется плагин камеры Apache для получения результатов вызова плагина из полезной нагрузки события resume. Часть кода, связанная с объектом resume event.pendingResult, требует cordova-android 5.1.0+

// This state represents the state of our application and will be saved and
// restored by onResume() and onPause()
var appState = {
    takingPicture: true,
    imageUri: ""
};

var APP_STORAGE_KEY = "exampleAppState";

var app = {
    initialize: function() {
        this.bindEvents();
    },
    bindEvents: function() {
        // Here we register our callbacks for the lifecycle events we care about
        document.addEventListener('deviceready', this.onDeviceReady, false);
        document.addEventListener('pause', this.onPause, false);
        document.addEventListener('resume', this.onResume, false);
    },
    onDeviceReady: function() {
        document.getElementById("take-picture-button").addEventListener("click", function() {
            // Because the camera plugin method launches an external Activity,
            // there is a chance that our application will be killed before the
            // success or failure callbacks are called. See onPause() and
            // onResume() where we save and restore our state to handle this case
            appState.takingPicture = true;

            navigator.camera.getPicture(cameraSuccessCallback, cameraFailureCallback,
                {
                    sourceType: Camera.PictureSourceType.CAMERA,
                    destinationType: Camera.DestinationType.FILE_URI,
                    targetWidth: 250,
                    targetHeight: 250
                }
            );
        });
    },
    onPause: function() {
        // Here, we check to see if we are in the middle of taking a picture. If
        // so, we want to save our state so that we can properly retrieve the
        // plugin result in onResume(). We also save if we have already fetched
        // an image URI
        if(appState.takingPicture || appState.imageUri) {
            window.localStorage.setItem(APP_STORAGE_KEY, JSON.stringify(appState));
        }
    },
    onResume: function(event) {
        // Here we check for stored state and restore it if necessary. In your
        // application, it's up to you to keep track of where any pending plugin
        // results are coming from (i.e. what part of your code made the call)
        // and what arguments you provided to the plugin if relevant
        var storedState = window.localStorage.getItem(APP_STORAGE_KEY);

        if(storedState) {
            appState = JSON.parse(storedState);
        }

        // Check to see if we need to restore an image we took
        if(!appState.takingPicture && appState.imageUri) {
            document.getElementById("get-picture-result").src = appState.imageUri;
        }
        // Now we can check if there is a plugin result in the event object.
        // This requires cordova-android 5.1.0+
        else if(appState.takingPicture && event.pendingResult) {
            // Figure out whether or not the plugin call was successful and call
            // the relevant callback. For the camera plugin, "OK" means a
            // successful result and all other statuses mean error
            if(event.pendingResult.pluginStatus === "OK") {
                // The camera plugin places the same result in the resume object
                // as it passes to the success callback passed to getPicture(),
                // thus we can pass it to the same callback. Other plugins may
                // return something else. Consult the documentation for
                // whatever plugin you are using to learn how to interpret the
                // result field
                cameraSuccessCallback(event.pendingResult.result);
            } else {
                cameraFailureCallback(event.pendingResult.result);
            }
        }
    }
}

// Here are the callbacks we pass to getPicture()
function cameraSuccessCallback(imageUri) {
    appState.takingPicture = false;
    appState.imageUri = imageUri;
    document.getElementById("get-picture-result").src = imageUri;
}

function cameraFailureCallback(error) {
    appState.takingPicture = false;
    console.log(error);
}

app.initialize();

Соответствующий HTML:

<!DOCTYPE html>

<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <title>Cordova Android Lifecycle Example</title>
    </head>
    <body>
        <div class="app">
            <div>
                <img id="get-picture-result" />
            </div>
            <Button id="take-picture-button">Take Picture</button>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>
</html>

Тестирование жизненного цикла Activity

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

© 2012, 2013, 2015 The Apache Software Foundation
Licensed under the Apache License 2.0.
https://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API