Spec-Zone.ru › Cordova 7

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

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

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

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

Версия cordova-android Поддерживаемые уровни API Android Эквивалентная версия Android
6.X.X 16 - 25 4.1 - 7.1.1
5.X.X 14 - 23 4.0 - 6.0.1
4.1.X 14 - 22 4.0 - 5.1
4.0.X 10 - 22 2.3.3 - 5.1
3.7.X 10 - 21 2.3.3 - 5.0.2

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

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

Установка необходимых компонентов

Java Development Kit (JDK)

Установите Java Development Kit (JDK) 8.

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

Android SDK

Установите Android Studio. Подробные инструкции по установке находятся на сайте разработчиков Android.

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

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

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

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

См. документацию Android по установке пакетов SDK для получения более подробной информации.

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

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

  1. Установите переменную среды JAVA_HOME на расположение вашей установки JDK
  2. Установите переменную среды ANDROID_HOME на расположение вашей установки Android SDK
  3. Также рекомендуется добавить каталоги tools, tools/bin, и 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 --emulator

Настройка Gradle

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

Настройка свойств 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": ""
        }
    }
}

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

Также поддерживается смешивание аргументов командной строки и параметров в 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. Обратите внимание, что при открытии проекта в 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. Этот путь разработки может предложить вам больший набор вариантов разработки в определенных ситуациях, чем кроссплатформенный cordova CLI. Например, при развертывании пользовательского Cordova WebView наряду с нативными компонентами необходимо использовать утилиты командной строки. Прежде чем использовать этот путь разработки, вы по-прежнему должны настроить среду 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 в фоновый режим. Эти другие активности обычно запускаются для выполнения конкретной задачи с помощью нативного приложения, установленного на устройстве. Например, плагин камеры Cordova Cordova camera plugin запускает любую нативную активность камеры, установленную на устройстве, для того, чтобы сделать фотографию. Использование установленного приложения камеры таким образом делает ваше приложение похожим на нативное приложение, когда пользователь пытается сделать фотографию. К сожалению, когда нативная активность переводит ваше приложение в фоновый режим, есть вероятность, что операционная система его уничтожит.

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

  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 camera в качестве примера того, как получить результаты вызова плагина из полезной нагрузки события resume. Часть кода, связанная с объектом resume's 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>

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

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

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

Spec-Zone.ru

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