API Android 2.3

Уровень API: 9

Для разработчиков платформа Android 2.3 ( GINGERBREAD ) доступна в виде загружаемого компонента Android SDK. Загружаемая платформа включает в себя библиотеку Android и образ системы, а также набор скинов эмулятора и многое другое. Чтобы начать разработку или тестирование для Android 2.3, используйте Android SDK Manager, чтобы загрузить платформу в свой SDK.

Обзор API

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

VoIP на базе SIP

Платформа теперь включает в себя стек протоколов SIP и API-интерфейс платформы, которые позволяют разработчикам создавать приложения для интернет-телефонии. Используя API, приложения могут предлагать функции голосовых вызовов без необходимости управлять сеансами, связью на транспортном уровне или аудио — они прозрачно обрабатываются SIP API и службами платформы.

SIP API доступен в пакете android.net.sip . Ключевой класс — SipManager , который приложения используют для настройки профилей SIP и управления ими, а затем инициации аудиовызовов и приема аудиовызовов. После установления аудиовызова приложения могут отключать звук вызовов, включать режим громкой связи, отправлять сигналы DTMF и многое другое. Приложения также могут использовать SipManager для создания стандартных SIP-соединений.

Базовый стек и услуги SIP платформы доступны на устройствах по усмотрению производителя и соответствующего оператора связи. По этой причине приложения должны использовать метод isApiSupported() чтобы проверить, доступна ли поддержка SIP, прежде чем предоставлять пользователям функции вызова.

Чтобы использовать SIP API, приложения должны запросить разрешение у пользователя, объявив <uses-permission android:name="android.permission.INTERNET"> и <uses-permission android:name="android.permission.USE_SIP"> в своих файлы манифеста.

Кроме того, разработчики могут запросить фильтрацию в Google Play, чтобы их приложения не были видны пользователям, чьи устройства не включают стек и сервисы SIP платформы. Чтобы запросить фильтрацию, добавьте в приложение <uses-feature android:name="android.software.sip" android:required="true"> и <uses-feature android:name="android.software.sip.voip"> манифест.

Для получения дополнительной информации прочтите руководство разработчика SIP .

Связь ближнего радиуса действия (NFC)

Android 2.3 включает в себя стек NFC и API-интерфейс платформы, который позволяет разработчикам считывать теги NDEF, которые обнаруживаются, когда пользователь прикасается к устройству с поддержкой NFC, для маркировки элементов, встроенных в наклейки, интеллектуальные плакаты и даже другие устройства.

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

API NFC доступен в пакете android.nfc . Ключевые классы:

  • NfcAdapter , который представляет оборудование NFC на устройстве.
  • NdefMessage , который представляет сообщение данных NDEF, стандартный формат, в котором «записи», содержащие данные, передаются между устройствами и тегами. Приложения могут получать эти сообщения из ACTION_TAG_DISCOVERED Intents.
  • NdefRecord , доставленный в NdefMessage , который описывает тип совместно используемых данных и содержит сами данные.

Связь NFC опирается на беспроводную технологию в аппаратном обеспечении устройства, поэтому поддержка функций NFC платформы на конкретных устройствах определяется их производителями. Чтобы определить поддержку NFC на текущем устройстве, приложения могут вызвать isEnabled() для запроса NfcAdapter . Однако NFC API присутствует всегда, независимо от базовой аппаратной поддержки.

Чтобы использовать NFC API, приложения должны запросить разрешение у пользователя, объявив <uses-permission android:name="android.permission.NFC"> в своих файлах манифеста.

Кроме того, разработчики могут запросить фильтрацию в Google Play, чтобы их приложения не были видны пользователям, чьи устройства не поддерживают NFC. Чтобы запросить фильтрацию, добавьте <uses-feature android:name="android.hardware.nfc" android:required="true"> в манифест приложения.

Чтобы просмотреть пример приложения, использующего NFC API, см. NFCDemo .

Гироскоп и другие датчики

В Android 2.3 добавлена ​​поддержка платформы и API для нескольких новых типов показаний датчиков — гироскопа, вектора вращения, линейного ускорения, гравитации и барометра. Разработчики могут использовать показания новых датчиков для создания приложений, которые быстро и плавно реагируют на точные изменения положения и движения устройства. API датчика сообщает об изменениях гироскопа и других датчиков заинтересованным приложениям, независимо от того, работают ли они в платформе приложения или в собственном коде.

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

Разработчики могут запросить фильтрацию в Google Play, чтобы их приложения не были видны пользователям, чьи устройства не оснащены датчиком гироскопа. Для этого добавьте <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"> в манифест приложения.

Подробности API см. в Sensor .

Поддержка нескольких камер

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

  • Новый класс Camera.CameraInfo хранит характеристики положения камеры (ориентация, фронтальная или задняя сторона).
  • Новые методы getNumberOfCameras() и getCameraInfo() в классе Camera позволяют приложениям запрашивать доступные камеры и открывать нужную камеру.
  • Новый метод get() позволяет приложениям получать CamcorderProfile для конкретной камеры.
  • Новый getJpegEncodingQualityParameter() позволяет приложениям получать уровень качества захвата неподвижных изображений для конкретной камеры.

Чтобы просмотреть пример кода для доступа к фронтальной камере, см. CameraPreview.java в примере приложения ApiDemos.

API камеры также добавляет:

  • Новые параметры для камер, включая расстояние фокусировки, режим фокусировки и максимальную/минимальную частоту кадров предварительного просмотра. Новые getFocusDistances() , getPreviewFpsRange() и getSupportedPreviewFpsRange() для получения параметров камеры, а также setPreviewFpsRange() для установки частоты кадров предварительного просмотра.

Микшируемые звуковые эффекты

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

Чтобы просмотреть пример кода для звуковых эффектов, см. AudioFxDemo.java в примере приложения ApiDemos.

Медиа-структура также добавляет:

  • Новая поддержка тега высоты в метаданных EXIF ​​для файлов JPEG. Новый метод getAltitude() для получения значения тега высоты EXIF.
  • Новый метод setOrientationHint() позволяет приложению сообщать MediaRecorder об ориентации во время захвата видео.

Менеджер загрузок

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

  • Приложения могут получить экземпляр класса DownloadManager , вызвав getSystemService(String) и передав DOWNLOAD_SERVICE . Приложения, которые запрашивают загрузку через этот API, должны зарегистрировать широковещательный приемник для ACTION_NOTIFICATION_CLICKED , чтобы соответствующим образом обрабатывать, когда пользователь нажимает на выполняемую загрузку в уведомлении или в пользовательском интерфейсе загрузок.
  • Класс DownloadManager.Request позволяет приложению предоставлять всю информацию, необходимую для запроса новой загрузки, например URI запроса и место назначения загрузки. URI запроса — единственный обязательный параметр. Обратите внимание, что местом назначения загрузки по умолчанию является общий том, где система может удалить ваш файл, если ей потребуется освободить место для использования системой. Для постоянного хранения загрузки укажите место назначения загрузки во внешнем хранилище (см. setDestinationUri(Uri) ).
  • Класс DownloadManager.Query предоставляет методы, которые позволяют приложению запрашивать и фильтровать активные загрузки.

Строгий режим

Чтобы помочь разработчикам отслеживать и улучшать производительность своих приложений, платформа предлагает новую системную функцию под названием StrictMode . При реализации в приложении StrictMode перехватывает и уведомляет разработчика о случайной активности диска или сети, которая может снизить производительность приложения, например, о действиях, происходящих в основном потоке приложения (где принимаются операции пользовательского интерфейса и также происходит анимация). Разработчики могут оценивать проблемы использования сети и диска, возникающие в StrictMode, и при необходимости исправлять их, сохраняя основной поток более отзывчивым и предотвращая показ диалоговых окон ANR пользователям.

  • StrictMode — это базовый класс и основная точка интеграции с системой и виртуальной машиной. Класс предоставляет удобные методы для управления потоками и политиками виртуальной машины, применимыми к экземпляру.
  • StrictMode.ThreadPolicy и StrictMode.VmPolicy содержат политики, которые вы определяете и применяете к экземплярам потоков и виртуальных машин.

Дополнительные сведения о том, как использовать StrictMode для оптимизации приложения, см. в документации класса и примере кода на android.os.StrictMode .

Платформа пользовательского интерфейса

  • Поддержка чрезмерной прокрутки
    • Новая поддержка чрезмерной прокрутки в представлениях и виджетах. В представлениях приложения могут включать/отключать избыточную прокрутку для данного представления, устанавливать режим избыточной прокрутки, управлять расстоянием избыточной прокрутки и обрабатывать результаты избыточной прокрутки.
    • В виджетах приложения могут управлять такими характеристиками прокрутки, как анимация, пружинение и расстояние прокрутки. Дополнительные сведения см. android.view.View и android.widget.OverScroller .
    • ViewConfiguration также предоставляет методы getScaledOverflingDistance() и getScaledOverscrollDistance() .
    • Новые атрибуты overScrollMode , overScrollFooter и overScrollHeader для элементов <ListView> для управления поведением чрезмерной прокрутки.
  • Поддержка сенсорной фильтрации
    • Новая поддержка сенсорной фильтрации, которая позволяет приложению повысить безопасность представлений, обеспечивающих доступ к конфиденциальным функциям. Например, сенсорная фильтрация подходит для обеспечения безопасности действий пользователя, таких как предоставление запроса на разрешение, совершение покупки или нажатие на рекламу. Подробности смотрите в документации класса View .
    • Новый атрибут filterTouchesWhenObscured для элементов представления, который определяет, следует ли фильтровать прикосновения, когда окно представления закрыто другим видимым окном. Если установлено значение "true" , представление не будет получать касания всякий раз, когда над окном представления появляется всплывающее сообщение, диалоговое окно или другое окно. Подробности см. в разделе «Просмотр документации по безопасности» .

    Чтобы просмотреть пример кода для сенсорной фильтрации, см. SecureView.java в примере приложения ApiDemos.

  • Улучшенное управление событиями
    • Новый базовый класс для событий ввода, InputEvent . Класс предоставляет методы, которые позволяют приложениям определять значение события, например, путем запроса устройства ввода, из которого возникло событие. KeyEvent и MotionEvent являются подклассами InputEvent .
    • Новый базовый класс для устройств ввода, InputDevice . Класс хранит информацию о возможностях конкретного устройства ввода и предоставляет методы, позволяющие приложениям определять, как интерпретировать события от устройства ввода.
  • Улучшенные события движения
    • API MotionEvent расширен за счет включения информации «идентификатора указателя», которая позволяет приложениям отслеживать отдельные пальцы при их движении вверх и вниз. Класс добавляет множество методов, которые позволяют приложению эффективно работать с событиями движения.
    • Система ввода теперь имеет логику для генерации событий движения с новой информацией об идентификаторе указателя, синтезируя идентификаторы по мере того, как новые указатели не работают. Система отслеживает несколько идентификаторов указателей отдельно во время события движения и обеспечивает правильную непрерывность указателей, оценивая расстояние между последним и следующим набором указателей.
  • Элементы управления выделением текста
    • Новый метод setComposingRegion позволяет приложению помечать область текста как составляющую текст, сохраняя текущий стиль. Метод getSelectedText возвращает выделенный текст приложению. Эти методы доступны в BaseInputConnection , InputConnection и InputConnectionWrapper .
    • Новые атрибуты textSelectHandle , textSelectHandleLeft , textSelectHandleRight и textSelectHandleWindowStyle для <TextView> для ссылки на элементы рисования, которые будут использоваться для отображения привязок выделения текста и стиля содержащего их окна.
  • Элементы управления активностью
  • Стили текста и значков уведомлений
  • Очень большие экраны

    Платформа теперь поддерживает очень большие размеры экрана, например те, которые можно найти на планшетных устройствах. Разработчики могут указать, что их приложения предназначены для поддержки очень больших размеров экрана, добавив элемент <supports screens ... android:xlargeScreens="true"> в свои файлы манифеста. Приложения могут использовать новый квалификатор ресурса xlarge для пометки ресурсов, специфичных для очень больших экранов. Подробную информацию о поддержке очень больших и других размеров экрана см. в разделе «Поддержка нескольких экранов» .

    Графика

    Поставщики контента

    • Новый класс поставщика AlarmClock для установки будильника или его обработки. Поставщик содержит действие намерения ACTION_SET_ALARM и дополнительные функции, которые можно использовать для запуска действия для установки нового будильника в приложении будильника. Приложения, которые хотят получить намерение SET_ALARM , должны создать действие, для которого требуется разрешение SET_ALARM. Приложения, которые хотят создать новый будильник, должны использовать Context.startActivity() , чтобы у пользователя была возможность выбрать, какое приложение будильника использовать.
    • MediaStore поддерживает новое действие Intent, PLAY_FROM_SEARCH , которое позволяет приложению выполнять поиск музыкальных носителей и автоматически воспроизводить контент из результата, когда это возможно. Например, приложение может активировать это намерение в результате команды распознавания голоса для прослушивания музыки.
    • MediaStore также добавляет новый флаг MEDIA_IGNORE_FILENAME , который сообщает сканеру мультимедиа игнорировать медиафайлы в содержащем каталоге и его подкаталогах. Разработчики могут использовать это, чтобы избежать появления графики в галерее, а также предотвратить отображение звуков и музыки приложений в приложении «Музыка».
    • Поставщик Settings добавляет новые действия активности APPLICATION_DETAILS_SETTINGS и MANAGE_ALL_APPLICATIONS_SETTINGS , которые позволяют приложению отображать экран сведений для определенного приложения или отображать экран управления приложениями.
    • Поставщик ContactsContract добавляет тип данных ContactsContract.CommonDataKinds.SipAddress для хранения адреса SIP (интернет-телефонии) контакта.

    Расположение

    • LocationManager теперь отслеживает запросы приложений, которые приводят к блокировке пробуждения или блокировке Wi-Fi, в соответствии с WorkSource — управляемым системой классом, который идентифицирует приложение.

      LocationManager отслеживает всех клиентов, запрашивающих периодические обновления, и сообщает о них своим поставщикам в виде параметра WorkSource при установке минимального времени обновления. Поставщик сетевого определения использует WorkSource для отслеживания блокировок пробуждения и Wi-Fi, инициированных приложением, и добавляет их к расходу батареи приложения, указанному в разделе «Управление приложениями».

    • LocationManager добавляет несколько новых методов, которые позволяют регистрировать активность для получения периодических или разовых обновлений местоположения на основе заданных критериев (см. ниже).
    • Новый класс Criteria позволяет приложению указывать набор критериев для выбора поставщика местоположения. Например, поставщики могут быть упорядочены по точности, энергопотреблению, способности сообщать высоту, скорость и пеленг, а также по денежной стоимости.

    Хранилище

    • В Android 2.3 добавлен новый StorageManager , который поддерживает файлы OBB (Opaque Binary Blob). Хотя поддержка платформы OBB доступна в Android 2.3, инструменты разработки для создания файлов OBB и управления ими будут доступны только в начале 2011 года.
    • Платформа Android 2.3 добавляет официальную поддержку устройств, в которых нет SD-карт (хотя она обеспечивает виртуальный раздел SD-карты, когда физическая SD-карта недоступна). Удобный метод isExternalStorageRemovable() позволяет приложениям определять, присутствует ли физическая SD-карта.

    Менеджер пакетов

    • Новые константы для объявления аппаратных и программных функций. См. список в разделе «Константы новых функций» ниже.
    • PackageInfo добавляет новые поля firstInstallTime и lastUpdateTime , в которых хранится время установки пакета и последнего обновления.
    • Новый метод getProviderInfo() для получения всей информации, известной о конкретном классе поставщика контента.

    Телефония

    • TelephonyManager добавляет константу NETWORK_TYPE_EVDO_B для указания типа сети CDMA EVDO Rev B.
    • Новый метод getPsc() возвращает основной код скремблирования обслуживающей соты в сети UMTS.

    Собственный доступ к жизненному циклу активности, Windows

    Android 2.3 предоставляет широкий набор API-интерфейсов для приложений, использующих собственный код. Классы фреймворка, представляющие интерес для таких приложений, включают:

    • NativeActivity — это новый тип класса Activity, обратные вызовы жизненного цикла которого реализованы непосредственно в машинном коде. NativeActivity и его базовый собственный код выполняются в системе так же, как и другие действия — в частности, они запускаются в системном процессе приложения Android и выполняются в основном потоке пользовательского интерфейса приложения, и они получают те же обратные вызовы жизненного цикла, что и другие действия.
    • Новый класс InputQueue и интерфейс обратного вызова позволяют собственному коду управлять очередью событий.
    • Новый интерфейс SurfaceHolder.Callback2 позволяет собственному коду управлять SurfaceHolder .
    • Новые методы takeInputQueue и takeSurface() в Window позволяют собственному коду управлять событиями и поверхностями.

    Полную информацию о работе с собственным кодом или загрузке NDK см. на странице Android NDK .

    Среда выполнения Далвика

    Новые элементы и атрибуты манифеста

    • Новый атрибут xlargeScreens для элемента <supports-screens> , указывающий, поддерживает ли приложение форм-факторы очень большого экрана. Подробности см. в разделе «Поддержка нескольких экранов» .
    • Новые значения атрибута android:screenOrientation элемента <activity> :
      • "reverseLandscape" — Активность хотела бы, чтобы экран был в альбомной ориентации, повернут в сторону, противоположную обычной альбомной ориентации.
      • "reversePortrait" — Действию хотелось бы, чтобы экран был в книжной ориентации, повернут в сторону, противоположную обычной портретной ориентации.
      • "sensorLandscape" — Активность хотела бы, чтобы экран был в альбомной ориентации, но может использовать датчик, чтобы изменить направление, в котором смотрит экран.
      • "sensorPortrait" — Активность хотела бы, чтобы экран был в книжной ориентации, но может использовать датчик, чтобы изменить направление, в котором смотрит экран.
      • "fullSensor" — ориентация определяется датчиком физической ориентации: дисплей будет вращаться в зависимости от того, как пользователь перемещает устройство. Это позволяет осуществлять любой из 4 возможных поворотов, независимо от того, что обычно делает устройство (например, некоторые устройства обычно не используют поворот на 180 градусов).

    Новые разрешения

    • com.android.permission.SET_ALARM — позволяет приложению транслировать намерение установить будильник для пользователя. Это разрешение должно потребоваться для действия, которое обрабатывает действие намерения SET_ALARM .
    • android.permission.USE_SIP — позволяет приложению использовать SIP API для совершения или приема интернет-вызовов.
    • android.permission.NFC — позволяет приложению использовать NFC API для чтения тегов NFC.

    Новые константы функций

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

    • android.hardware.audio.low_latency — приложение использует аудиоконвейер с малой задержкой на устройстве и чувствительно к задержкам или задержке ввода или вывода звука.
    • android.hardware.camera.front — приложение использует фронтальную камеру устройства.
    • android.hardware.nfc — приложение использует функции радио NFC в устройстве.
    • android.hardware.sensor.barometer — приложение использует барометр устройства.
    • android.hardware.sensor.gyroscope — приложение использует датчик гироскопа устройства.
    • android.software.sip — приложение использует SIP API на устройстве.
    • android.software.sip.voip — приложение использует на устройстве службу VoIP на основе SIP.
    • android.hardware.touchscreen.multitouch.jazzhand — приложение использует расширенные возможности многоточечного мультитач на экране устройства для полностью независимого отслеживания пяти или более точек.

    Полную информацию о том, как объявлять функции и использовать их для фильтрации, см. в документации <uses-feature> .

    Отчет о различиях API

    Подробное описание всех изменений API в Android 2.3 (уровень API 9) см. в отчете о различиях API .

    Уровень API

    Платформа Android 2.3 предоставляет обновленную версию API платформы. API Android 2.3 присвоен целочисленный идентификатор — 9 , который хранится в самой системе. Этот идентификатор, называемый «уровнем API», позволяет системе правильно определить, совместимо ли приложение с системой, до его установки.

    Чтобы использовать API-интерфейсы, представленные в Android 2.3, в вашем приложении, вам необходимо скомпилировать приложение с помощью библиотеки Android, предоставляемой на платформе Android 2.3 SDK. В зависимости от ваших потребностей вам также может потребоваться добавить атрибут android:minSdkVersion="9" к элементу <uses-sdk> в манифесте приложения. Если ваше приложение предназначено для работы только на Android 2.3 и выше, объявление атрибута не позволит установить приложение на более ранние версии платформы.

    Для получения дополнительной информации прочитайте «Что такое уровень API?».