Nivel de API: 21
Android 5.0 (LOLLIPOP) ofrece nuevas funciones para usuarios y desarrolladores de apps. En este documento, se proporciona un una introducción a las APIs nuevas más notables.
Si publicaste una app, asegúrate de consultar el artículo sobre Comportamiento de Android 5.0 Cambios que debes tener en cuenta en tu app Estos cambios en el comportamiento puede afectar tu app en dispositivos con Android 5.0, incluso si no estás usando APIs nuevas o buscar nuevas funcionalidades.
Para obtener una visión de alto nivel de las nuevas funciones de la plataforma, consulta la Android Lollipop destacados.
Empezar a programar
Para comenzar a crear apps para Android 5.0, primero debes obtener SDK de Android. Luego, usa SDK Manager. para descargar las imágenes del sistema y la plataforma de SDK de Android 5.0.
Actualiza el nivel de tu API de destino
Para optimizar mejor tu app para dispositivos con Android 5.0, haz lo siguiente:
establece tu targetSdkVersion
en
"21"
, instala tu app en un dispositivo Android
5.0, pruébala y publica la app actualizada con
este cambio.
Puedes usar las APIs de Android 5.0 y, al mismo tiempo, admitir las versiones anteriores
agregando condiciones a tu código que comprueben el nivel de API del sistema
antes de ejecutar APIs no compatibles con tu minSdkVersion
.
Para obtener más información sobre cómo mantener la retrocompatibilidad, consulta Compatibilidad
Diferentes versiones de la plataforma.
Para obtener más información sobre cómo funcionan los niveles de API, lee Qué es la API nivel?
Importantes cambios en los comportamientos
Si publicaste anteriormente una app para Android, ten en cuenta que esta podría verse afectada por los cambios de Android 5.0.
Consulta Cambios en Android 5.0 para obtener información completa.
Interfaz de usuario
Compatibilidad con Material Design
Android 5.0 agrega compatibilidad con el nuevo Material Design de Android. estilo. Puedes crear aplicaciones con Material Design que sean visualmente dinámicas y tener transiciones de elementos de la IU que se sienten naturales para los usuarios. Esta compatibilidad incluye lo siguiente:
- Tema material
- Visualización de sombras
- El widget de
RecyclerView
- Animación de elementos de diseño y efectos de estilo
- Animación de material design y efectos de transición de actividad
- Animadores para propiedades de vista en función del estado de la vista
- Widgets personalizables de IU y barras de apps con paletas de colores que puedes controlar
- Elementos de diseño animados y no animados en función de gráficos vectoriales XML
Para obtener más información sobre cómo agregar funcionalidad de material design a tu aplicación, consulta Material Design
Documentos y actividades concurrentes en la pantalla de recientes
En las versiones anteriores,
pantalla de recientes
solo pudo mostrar una tarea para cada app con la que el usuario interactuó
más recientes. Ahora tu app puede abrir más tareas según sea necesario para obtener
actividades simultáneas de documentos. Esta función facilita la realización de varias tareas a la vez al
lo que permite a los usuarios cambiar rápidamente entre actividades y documentos
la pantalla Recientes, con una experiencia de cambio coherente entre todas las apps.
Algunos ejemplos de estas tareas simultáneas pueden incluir las pestañas abiertas en una
navegador web, documentos en una aplicación de productividad, coincidencias simultáneas en
un juego o chats en una app de mensajería. Tu app puede administrar sus tareas
a través de la clase ActivityManager.AppTask
Insertar una interrupción lógica de modo que el sistema trate tu actividad como una actividad
tarea, usa FLAG_ACTIVITY_NEW_DOCUMENT
cuando
iniciar la actividad con startActivity()
También puedes obtener este comportamiento
<actividad>
el atributo documentLaunchMode
del elemento a "intoExisting"
o
"always"
en tu manifiesto.
Para evitar la saturación de la pantalla de recientes, puedes establecer la cantidad máxima de
tareas de tu app que pueden aparecer en esa pantalla. Para hacer esto, configura
<aplicación>
el atributo android:maxRecents
. El valor actual
y la cantidad máxima que se puede especificar es de 50 tareas por usuario (25 para dispositivos con poca RAM).
Mediante configuración, se puede determinar que las tareas persistan en la pantalla de recientes tras los reinicios. Para controlar
el comportamiento de persistencia, usa el
android:persistableMode
. También puedes cambiar
propiedades visuales de una actividad en la pantalla de recientes, como la
el color, la etiqueta y el icono de la actividad llamando al
setTaskDescription()
.
Actualizaciones de WebView
En Android 5.0, se actualiza WebView
.
en Chromium M37, que incorpora mejoras de seguridad y estabilidad,
y la corrección de errores. La cadena usuario-agente predeterminada para un
WebView
que se ejecuta en Android 5.0 tiene
para incorporar 37.0.0.0 como número de versión.
En esta versión, se presenta la clase PermissionRequest
,
que permite que tu app otorgue el permiso WebView
para acceder a recursos protegidos, como la cámara y el micrófono, a través de APIs web
como getUserMedia(). Tu app debe tener los permisos de
permisos de Android para estos recursos con el fin de otorgar los permisos a la
WebView
Con el nuevo método onShowFileChooser()
,
Ahora puedes usar un campo de formulario de entrada en WebView
e iniciar un selector de archivos para seleccionar imágenes y archivos del dispositivo Android.
Además, esta versión ofrece compatibilidad con los WebAudio, WebGL y Estándares abiertos de WebRTC. Para obtener más información sobre las nuevas funciones incluidas en esta versión, consulta WebView para Android:
Captura y uso compartido de pantalla
Android 5.0 te permite agregar capacidades de captura y uso compartido de pantalla a
tu app con las nuevas APIs de android.media.projection
. Esta funcionalidad
es útil, por ejemplo, si quieres habilitar la opción para compartir pantalla en un video
para conferencias de Google.
El nuevo método createVirtualDisplay()
permite que tu app capture el contenido de la pantalla principal (el archivo
mostrar) en un objeto Surface
, que luego tu app puede
enviar a través de la red. La API solo permite capturar pantallas no seguras
contenido y no el audio del sistema. Para iniciar la captura de pantalla, tu app primero debe
solicitar el permiso del usuario abriendo un cuadro de diálogo de captura de pantalla mediante un
Intent
obtenido a través de
createScreenCaptureIntent()
.
Para ver un ejemplo de cómo usar las nuevas APIs, consulta la MediaProjectionDemo
en el proyecto de muestra.
Notificaciones
Notificaciones en la pantalla bloqueada
En las pantallas de bloqueo de Android 5.0, se puede presentar notificaciones. En la Configuración, los usuarios pueden elegir si desean permitir las notificaciones sensibles que se muestren en una pantalla bloqueada segura.
Tu app puede controlar el nivel de detalle visible cuando sus notificaciones son
que se muestra en la pantalla de bloqueo segura. Para controlar el nivel de visibilidad, llama a
setVisibility()
y
especifica uno de estos valores:
VISIBILITY_PRIVATE
: Muestra información básica, como el ícono de la notificación, pero oculta la todo el contenido de la notificación.VISIBILITY_PUBLIC
: Muestra todo el contenido de la notificación.VISIBILITY_SECRET
: No muestra nada y excluye incluso el ícono de la notificación.
Cuando el nivel de visibilidad es VISIBILITY_PRIVATE
,
puedes proporcionar una versión oculta de la notificación
contenido que oculta datos personales. Por ejemplo, una app de SMS podría mostrar una
notificación con el mensaje "Tienes 3 mensajes de texto nuevos" pero oculta el mensaje
el contenido y los remitentes. Para proporcionar esta notificación alternativa, primero crea el
notificación de reemplazo con Notification.Builder
. Cuándo
crea el objeto de notificación privada y adjunta la notificación de reemplazo
a través de la
setPublicVersion()
.
Metadatos de notificaciones
Android 5.0 usa metadatos asociados con las notificaciones de tu app
para ordenar las notificaciones de manera más inteligente. Para definir los metadatos, llama al
los siguientes métodos en Notification.Builder
cuando
construye la notificación:
setCategory()
: Le indica al sistema cómo controlar las notificaciones de tu app cuando la el dispositivo está en modo de prioridad (por ejemplo, si una notificación representa un llamada entrante, mensaje instantáneo o alarma).setPriority()
: Marca la notificación como más o menos importante que las notificaciones normales. Notificaciones con el campo de prioridad establecido enPRIORITY_MAX
oPRIORITY_HIGH
aparecen en un una ventana flotante pequeña si la notificación también tiene sonido o vibración.addPerson()
: Te permite agregar una o más personas que sean relevantes para una notificación. Tu app puede usarla para indicarle al sistema que debe agruparse notificaciones de las personas especificadas o clasifica las notificaciones de estas personas son más importantes.
Gráficos
Compatibilidad con OpenGL ES 3.1
Android 5.0 agrega interfaces Java y compatibilidad nativa con OpenGL ES 3.1. La nueva funcionalidad clave proporcionada en OpenGL ES 3.1 incluye lo siguiente:
- sombreadores de cálculo;
- objetos independientes de sombreadores;
- comandos de dibujo indirectos;
- texturas de símbolos y multimuestra;
- mejoras del lenguaje de sombreado
- extensiones para depuración y modos de fusión avanzados;
- compatibilidad con las versiones anteriores OpenGL ES 2.0 y 3.0.
La interfaz Java para OpenGL ES 3.1 en Android se proporciona con
GLES31
Al usar OpenGL ES 3.1, asegúrate de
declararla en tu archivo de manifiesto con el
Etiqueta <uses-feature>
y el atributo android:glEsVersion
. Por ejemplo:
<manifest> <uses-feature android:glEsVersion="0x00030001" /> ... </manifest>
Para obtener más información sobre el uso de OpenGL ES, incluida la manera de comprobar la versión de OpenGL ES que admite el dispositivo durante el tiempo de ejecución, consulta la Guía de la API de OpenGL ES.
Paquete de extensiones de Android
Además de OpenGL ES 3.1, esta versión proporciona un paquete de extensión con
Interfaces de Java y compatibilidad nativa para la funcionalidad de gráficos avanzados. Estos
se tratan como un único paquete en Android. (Si el elemento
Hay ANDROID_extension_pack_es31a
extensión, tu app puede
se da por sentado que todas las extensiones del paquete están presentes y se habilita el lenguaje de sombreado.
con una sola sentencia #extension
).
El paquete de extensiones admite lo siguiente:
- La compatibilidad garantizada de sombreadores de fragmentos para búferes de almacenamiento de sombreador, imágenes y funciones atómicas (la compatibilidad con el sombreador de fragmentos es opcional en OpenGL ES 3.1)
- Sombreadores de geometría y teselación
- Formatos de compresión de texturas ASTC (LDR)
- Interpolación y sombreado por muestra
- Diferentes modos de fusión para cada archivo adjunto de color en un búfer de fotogramas
La interfaz de Java para el paquete de extensiones se proporciona con
GLES31Ext
En el manifiesto de tu app, puedes declarar que
tu aplicación debe instalarse únicamente en dispositivos que admiten el paquete de extensiones.
Por ejemplo:
<manifest> <uses-feature android:name=“android.hardware.opengles.aep” android:required="true" /> ... </manifest>
Contenido multimedia
Camera API para capacidades avanzadas de cámara
Android 5.0 presenta la nueva
android.hardware.camera2
API para facilitar la captura y el procesamiento de imágenes detallados Ahora puedes
puede acceder mediante programación a los dispositivos de cámara disponibles para el sistema con
getCameraIdList()
y conectarse a un dispositivo específico con
openCamera()
Para empezar a capturar imágenes, crea una CameraCaptureSession
y especifica los objetos Surface
para enviar las imágenes capturadas.
CameraCaptureSession
se puede configurar para
puedes tomar fotos individuales o múltiples en ráfaga.
Si deseas recibir una notificación cuando se capturen imágenes nuevas, implementa el
CameraCaptureSession.CaptureCallback
objeto de escucha
y configúrala
en la solicitud de captura. Cuando el sistema complete la imagen,
solicitud de captura, tu CameraCaptureSession.CaptureCallback
el objeto de escucha recibe una llamada a
onCaptureCompleted()
,
y te proporciona los metadatos de captura de imágenes
CaptureResult
La clase CameraCharacteristics
permite que tu
detectar qué funciones de cámara están disponibles en un dispositivo. El nombre del objeto
La propiedad INFO_SUPPORTED_HARDWARE_LEVEL
representa el nivel de funcionalidad de la cámara.
- Todos los dispositivos admiten al menos
Nivel de hardware de
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
, que tiene capacidades que es aproximadamente equivalente al de la funciónCamera
, que dejó de estar disponible. en la API de Cloud. - Los dispositivos compatibles con el nivel de hardware
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
pueden acceder de forma control de la captura y el procesamiento posterior, y la captura de imágenes de alta resolución con velocidades de fotogramas altas.
Para ver cómo usar la versión actualizada
Cámara
API, consulta la implementación de Camera2Basic
y Camera2Video
de muestra de esta versión.
Reproducción de audio
Esta versión incluye los siguientes cambios en
AudioTrack
:
- Ahora tu app puede proporcionar datos de audio en formato de punto flotante
(
ENCODING_PCM_FLOAT
). Esta permite un mayor rango dinámico, una precisión más consistente y un mayor margen. La aritmética de punto flotante resulta especialmente útil durante los cálculos intermedios. Los puntos finales de reproducción usan un formato de números enteros para datos de audio, con una profundidad de bits inferior. (En Android 5.0, todavía no hay partes de la canalización interna punto flotante). - Tu app ahora puede proporcionar datos de audio como un
ByteBuffer
, en el mismo formato que proporcionaMediaCodec
. - El
WRITE_NON_BLOCKING
puede simplificar el almacenamiento en búfer y varios subprocesos para algunas apps.
Control de reproducción de medios
Usa las nuevas APIs de notificaciones y contenido multimedia para asegurarte de que el
IU del sistema reconoce la reproducción de contenido multimedia y puede extraer y mostrar la imagen del álbum.
Con el nuevo modo, ahora es más fácil controlar la reproducción de contenido multimedia en una IU y un servicio
MediaSession
y
MediaController
de clases.
La nueva clase MediaSession
reemplaza
la clase RemoteControlClient
obsoleta y proporciona un
un único conjunto de métodos de devolución de llamada para controlar los controles de transporte y los botones multimedia.
Si tu app proporciona reproducción de contenido multimedia y se ejecuta en Android
TV o
Wear, usa la
Clase MediaSession
para administrar el transporte
con los mismos métodos de devolución de llamada.
Ahora puedes crear tu propia app de controlador multimedia con el nuevo
Clase MediaController
. Esta clase proporciona
una forma segura para subprocesos de supervisar y controlar la reproducción de contenido multimedia desde el proceso de IU de tu app.
Cuando crees un controlador, especifica un MediaSession.Token
de modo que tu app pueda interactuar con el objeto MediaSession
determinado.
Cuando usas los métodos MediaController.TransportControls
,
puedes enviar comandos como play()
,
stop()
,
skipToNext()
,
y setRating()
para controlar la reproducción de contenido multimedia en esa sesión. Con el control, también puedes
registra un objeto MediaController.Callback
para
detectar metadatos y cambios de estado en la sesión.
Además, puedes crear notificaciones enriquecidas que permitan el control de la reproducción
vinculado a una sesión multimedia con el nuevo Notification.MediaStyle
.
Navegación de contenido multimedia
Android 5.0 introduce la capacidad para que las apps exploren el contenido multimedia
biblioteca de otra app, hasta la nueva
android.media.browse
en la API de Cloud. Para exponer el contenido multimedia en tu app, extiende el
Clase MediaBrowserService
. Tu implementación de
MediaBrowserService
debe proporcionar acceso a un
MediaSession.Token
para que las apps puedan reproducir contenido multimedia
proporcionados a través de tu servicio.
Para interactuar con un servicio de navegador multimedia, usa el
Clase MediaBrowser
. Especifica el componente
para un objeto MediaSession
cuando creas un
Instancia MediaBrowser
. Con esa instancia de navegador,
tu app puede conectarse al servicio asociado y obtener una
MediaSession.Token
objeto para reproducir contenido expuesto
a través de ese servicio.
Almacenamiento
Selección de directorio
Android 5.0 extiende el Framework de acceso al almacenamiento para permitir que los usuarios seleccionen un subárbol completo del directorio y otorgarles a las apps acceso de lectura/escritura a todos los documentos contenidos sin requerir la confirmación del usuario para cada elemento.
Para seleccionar un subárbol de directorio, crea y envía un
OPEN_DOCUMENT_TREE
. El sistema muestra
Instancias de DocumentsProvider
que admiten la selección de subárboles,
lo que le permite al usuario navegar y seleccionar un directorio. El URI devuelto representa
acceso al subárbol seleccionado. Luego, podrás usar buildChildDocumentsUriUsingTree()
y buildDocumentUriUsingTree()
.
junto con
query()
para explorar el subárbol.
El nuevo método createDocument()
te permite crear documentos o directorios nuevos en cualquier lugar.
en el subárbol. Para administrar los documentos existentes, usa
renameDocument()
y
deleteDocument()
Revisa COLUMN_FLAGS
para verificar la compatibilidad del proveedor con estas llamadas antes de emitirlas.
Si implementas un DocumentsProvider
y quieres
Para admitir la selección de subárboles, implementa isChildDocument()
e incluye FLAG_SUPPORTS_IS_CHILD
.
en tu COLUMN_FLAGS
.
Android 5.0 también presenta nuevos directorios específicos de paquetes en
almacenamiento compartido en el que tu app puede colocar archivos multimedia para incluirlos
MediaStore
La nueva herramienta
getExternalMediaDirs()
muestra rutas de acceso a estas
directorios en todos los dispositivos de almacenamiento compartido. Al igual que en
getExternalFilesDir()
,
tu app no necesita permisos adicionales para acceder a las rutas que se muestran. El
búsqueda de forma periódica en busca de nuevos medios en estos directorios, pero también puedes
usa MediaScannerConnection
para buscar explícitamente
contenido.
Inalámbrico y Conectividad
Conexiones de red múltiples
Android 5.0 ofrece nuevas APIs de redes múltiples que permiten buscar de forma dinámica las redes disponibles con capacidades específicas y establecer una conexión con ellos. Esta funcionalidad es útil cuando tu app requiere una red especializada, como una SUPL, MMS o red de facturación del operador o si deseas enviar datos con un determinado tipo de protocolo de transporte.
Para seleccionar una red y conectarte a ella de forma dinámica desde tu app, sigue estos pasos: pasos:
- Crea un elemento
ConnectivityManager
. - Usa la clase
NetworkRequest.Builder
para crear unNetworkRequest
y especifica las características de red y el tipo de transporte que le interesa a tu app. - Para buscar redes adecuadas, llama a
requestNetwork()
oregisterNetworkCallback()
, y pasa elNetworkRequest
y una implementación deConnectivityManager.NetworkCallback
Usa elrequestNetwork()
si deseas cambiar de forma activa a una red adecuada una vez que se detecte para recibir solo notificaciones para redes escaneadas sin alternar activamente, usa elregisterNetworkCallback()
en su lugar.
Cuando detecta una red adecuada, se conecta a ella y
invoca la API de
onAvailable()
devolución de llamada. Puedes usar el objeto Network
de la devolución de llamada para
obtener información adicional sobre la red o dirigir el tráfico para que utilice el
la red seleccionada.
Bluetooth de bajo consumo
Android 4.3 introdujo compatibilidad de plataforma para Bluetooth de bajo consumo (Bluetooth LE) en el rol central. En Android 5.0, un dispositivo Android ahora puede que actúe como un dispositivo periférico Bluetooth LE. Las apps pueden usar esta función para que los dispositivos cercanos detecten su presencia. Por ejemplo, puedes crear apps que permiten que un dispositivo funcione como un podómetro o un monitor de salud y se comunique sus datos con otro dispositivo Bluetooth LE.
Las nuevas APIs de android.bluetooth.le
permiten que tus apps transmitan
anuncios, buscar respuestas y crear conexiones con conexiones Bluetooth cercanas
de Google Cloud. Para usar las nuevas funciones de publicidad y análisis, agrega lo siguiente:
BLUETOOTH_ADMIN
permiso en tu manifiesto. Cuando los usuarios actualizan o descargan la app desde Play Store,
se le solicita que otorgue el siguiente permiso a tu app:
"Información de conexión Bluetooth: Permite que la aplicación controle el Bluetooth,
incluida la transmisión o la obtención de información sobre dispositivos Bluetooth cercanos".
Para comenzar a publicar anuncios con Bluetooth LE para que otros dispositivos puedan detectar
tu app, llama
startAdvertising()
y pasar una implementación del
Clase AdvertiseCallback
. El objeto de devolución de llamada
recibe un informe del éxito o fracaso de la operación publicitaria.
Android 5.0 presenta la clase ScanFilter
, por lo que
que tu app puede buscar solo
tipos específicos de dispositivos en los que está interesado. Para comenzar a buscar Bluetooth, haz lo siguiente:
Dispositivos LE, llamar a startScan()
y pasar una lista de filtros. En la llamada de método, también debes proporcionar un
implementación de ScanCallback
para informar cuando un
Se encontró un anuncio de Bluetooth LE.
Mejoras de NFC
En Android 5.0 se agregan estas mejoras para ofrecer Uso flexible de NFC:
- Android Beam ahora está disponible en el menú Compartir.
- Tu app puede invocar Android Beam en el dispositivo del usuario para compartir datos
llamando a
invokeBeam()
. Esto evita la necesidad de que el usuario presione manualmente el dispositivo contra otro dispositivo compatible con NFC para completar la transferencia de datos. - Puedes usar el nuevo método
createTextRecord()
para crear un registro NDEF que contenga datos de texto UTF-8. - Si estás desarrollando una app de pagos, ahora puedes hacer lo siguiente:
registrar un ID de aplicación NFC (AID) de forma dinámica llamando
registerAidsForService()
También puedes usarsetPreferredService()
para establecer el servicio de emulación de tarjeta preferido que debería usarse cuando una actividad específica está en primer plano.
Proyecto Volta
Además de las nuevas funciones, Android 5.0 enfatiza las mejoras en la batería la vida. Usa las nuevas APIs y la herramienta para comprender y optimizar la potencia de tu app consumo de energía.
Programación de trabajos
Android 5.0 proporciona un nuevo elemento JobScheduler
.
API que permite optimizar la duración de batería definiendo los trabajos que ejecutará el sistema
de forma asíncrona más adelante o en condiciones específicas (por ejemplo, cuando la
se está cargando el dispositivo). La programación de trabajos es útil en situaciones como las siguientes:
- En la app hay trabajos en segundo plano que puedes posponer.
- La app tiene trabajos que preferirías hacer cuando la unidad esté enchufada.
- La app tiene una tarea que requiere acceso a la red o una conexión Wi-Fi. conexión.
- La app tiene varias tareas que quieres que se ejecuten por lotes con regularidad. de un proyecto.
Una unidad de trabajo está encapsulada por un objeto JobInfo
.
Este objeto especifica los criterios de programación.
Usa la clase JobInfo.Builder
para configurar la manera en que
la tarea programada. Puedes programar la tarea para que se ejecute
condiciones, como las que se mencionan a continuación:
- Empezar cuando el dispositivo se esté cargando.
- Empezar cuando el dispositivo esté conectado a una red no medida.
- Empezar cuando el dispositivo esté inactivo.
- Finalizar antes de un determinado plazo o con una demora mínima.
Por ejemplo, puedes agregar un código como este para ejecutar tu tarea en un red no medida:
Kotlin
val uploadTask: JobInfo = JobInfo.Builder( jobId, serviceComponent /* JobService component */ ).run { setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) build() } val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler jobScheduler.schedule(uploadTask)
Java
JobInfo uploadTask = new JobInfo.Builder(jobId, serviceComponent /* JobService component */) .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED) .build(); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(uploadTask);
Si el dispositivo tiene energía estable (es decir, se conectó por más tiempo) de 2 minutos y que la batería esté en un nivel saludable), el sistema ejecutará cualquier trabajo programado que esté listo para ejecutarse, incluso si el no haya vencido la fecha límite.
Para ver un ejemplo de cómo usar la API de JobScheduler
,
consulta la muestra de implementación de JobSchedulerSample
en esta versión.
Herramientas de desarrolladores para el uso de batería
El nuevo comando dumpsys batterystats
genera un
datos estadísticos sobre el uso de la batería de un dispositivo, organizados por ID de usuario único
(UID). Las estadísticas incluyen lo siguiente:
- historial de eventos relacionados con la batería;
- Estadísticas globales para el dispositivo
- Uso de energía aproximado por UID y componente de sistema
- ms por paquete de dispositivos móviles por app;
- Estadísticas globales de UID de sistema
- Estadísticas globales de UID de la app
Usa la opción --help
para conocer las diversas opciones de
adaptar el resultado. Por ejemplo, para imprimir el uso de batería
estadísticas para un paquete de app determinado desde la última vez que se cargó el dispositivo, ejecuta este
:
$ adb shell dumpsys batterystats --charged <package-name>
Puedes usar la
Battery Historian
en la salida del comando dumpsys
generar una visualización HTML de los eventos relacionados con la energía desde los registros. Esta
información facilita la comprensión y el diagnóstico de la batería
problemas relacionados.
Android en el entorno de trabajo y educativo
Aprovisionamiento administrado
Android 5.0 ofrece nuevas funcionalidades para ejecutar apps en un entorno empresarial. R administrador de dispositivos pueden iniciar un proceso de aprovisionamiento administrado el perfil administrado a un dispositivo, si el usuario ya tiene una cuenta personal. Las aplicaciones asociadas a perfiles administrados aparecen junto a apps no administradas en el Selector, la pantalla Recientes y las notificaciones del usuario
Para iniciar el proceso de aprovisionamiento administrado, envía
ACTION_PROVISION_MANAGED_PROFILE
en un objeto Intent
. Si el botón
se realiza correctamente, el sistema activa
onProfileProvisioningComplete()
.
Luego, puedes llamar a setProfileEnabled()
para
habilitar este perfil administrado
De manera predeterminada, solo un pequeño subconjunto de apps se habilitan en el perfil administrado.
Puedes instalar apps adicionales en el perfil administrado llamando
enableSystemApp()
Si estás desarrollando una app de Selector, puedes usar la nueva clase LauncherApps
para obtener una lista de actividades que se pueden iniciar
para el usuario actual y cualquier perfil administrado asociado. El Selector puede ser
que las aplicaciones administradas se destaquen visualmente agregando una insignia de trabajo al ícono
elemento de diseño. Para recuperar el ícono con distintivo, llama a
getUserBadgedIcon()
Para ver cómo utilizar la nueva funcionalidad, consulta la
Ejemplo de implementación de BasicManagedProfile
en esta versión.
Propietario del dispositivo
Android 5.0 introduce la capacidad de implementar una app de propietario de dispositivo. Un dispositivo
propietario es un tipo especializado de
administrador de dispositivos
que tenga la capacidad adicional de crear y quitar usuarios secundarios
ajustar la configuración global en el dispositivo. La app del propietario del dispositivo puede usar la
métodos de la clase DevicePolicyManager
para que tomen
un control detallado de la configuración, la seguridad y las apps en los dispositivos administrados.
Un dispositivo puede tener solamente un propietario de dispositivo activo a la vez.
Para implementar y activar un propietario de dispositivo, debes realizar una transferencia de datos NFC De una app de programación al dispositivo mientras este no está aprovisionado para cada estado. Esta transferencia de datos envía la misma información que la que se envía en el intent de aprovisionamiento como se describe en Aprovisionamiento administrado
Fijar pantalla
Android 5.0 presenta una nueva API de fijación de pantalla que te permite impedir que los usuarios salgan de tu tarea o sean interrumpidos por notificaciones Podría usarse, por ejemplo, si estás desarrollando una app educativa para admiten requisitos de evaluación de alto riesgo en Android o una aplicación de kiosco. Una vez que tu app activa la fijación de pantalla, los usuarios no pueden ver acceder a otras aplicaciones o volver a la pantalla principal, hasta que tu app salga del modo.
Existen dos maneras de activar la fijación de pantalla:
- Manualmente: Los usuarios pueden habilitar la fijación de pantalla en Configuración > Seguridad > Fijar pantalla y seleccionar las tareas que desees para fijarlo. Para ello, toca el ícono de marcador verde en la pantalla Recientes.
- De manera programática: Para activar la fijación de pantalla, haz lo siguiente:
de manera programática, llama a
startLockTask()
desde tu app. Si la app que realiza la solicitud no es un propietario de dispositivo, se le pide al usuario para su confirmación. Una app del propietario del dispositivo puede llamar alsetLockTaskPackages()
método para permitir que las aplicaciones se puedan fijar sin el paso de la confirmación del usuario.
Cuando el bloqueo de tareas está activo, ocurre lo siguiente:
- La barra de estado está en blanco, y las notificaciones y la información de estado del usuario oculto.
- Los botones Home y Recent Apps están ocultos.
- Otras apps no pueden iniciar actividades nuevas.
- La app actual puede iniciar actividades nuevas, siempre y cuando no lo haga crear tareas nuevas.
- Cuando un propietario de dispositivo invoca la función para fijar la pantalla, el usuario permanece bloqueado
a tu app hasta que esta llame
stopLockTask()
- Si otra app que no es del propietario del dispositivo activa la función para fijar la pantalla por el usuario directamente, este puede salir manteniendo presionados los botones Atrás y Recientes.
Framework de impresión
Representación de PDF como mapa de bits
Ahora puedes renderizar páginas de documentos PDF en imágenes de mapa de bits para imprimirlas
con la nueva clase PdfRenderer
Debes especificar un
ParcelFileDescriptor
que se puede buscar (es decir, el contenido
se puede acceder de forma aleatoria) en los que el sistema escribe el contenido imprimible.
Tu app puede obtener una página para renderizar con
openPage()
y, luego, llama
render()
para convertir el PdfRenderer.Page
abierto en un mapa de bits. Tú
también puede establecer parámetros adicionales si solo desea convertir una parte de la
documento en una imagen de mapa de bits (por ejemplo, para implementar
renderización de mosaicos
para acercar el documento).
Para ver un ejemplo de cómo usar las nuevas APIs, consulta la PdfRendererBasic
muestra.
Sistema
Estadísticas de uso de apps
Ahora puedes acceder al historial de uso de apps desde un dispositivo Android con el
Nueva API de android.app.usage
. Esta API proporciona un uso más detallado
más específica que la versión obsoleta
getRecentTasks()
.
Para usar esta API, primero debes declarar el
"android.permission.PACKAGE_USAGE_STATS"
en tu manifiesto.
El usuario también debe habilitar el acceso a esta app en Configuración > Seguridad > Aplicaciones
con acceso a datos de uso.
El sistema recopila los datos de uso por app y agrega datos en intervalos diarios, semanales, mensuales y anuales. La duración máxima que el sistema conserva estos datos es la siguiente:
- Datos diarios: 7 días
- Datos semanales: 4 semanas
- Datos mensuales: 6 meses
- Datos anuales: 2 años
Para cada app, el sistema registra los siguientes datos:
- la última vez que se usó la app;
- La cantidad total de tiempo que la app estuvo en primer plano durante ese intervalo (por día, semana, mes o año)
- Captura de marca de tiempo del momento en que un componente (identificado por un nombre de actividad y paquete) se trasladan al primer o segundo plano durante un día
- Captura de marca de tiempo del momento en que se modificó la configuración de un dispositivo (por ejemplo, cuando el la orientación del dispositivo cambió debido a la rotación)
Pruebas y Accesibilidad
Mejoras de pruebas y accesibilidad
Android 5.0 incorpora la siguiente compatibilidad para pruebas y accesibilidad:
- El nuevo
getWindowAnimationFrameStats()
ygetWindowContentFrameStats()
. capturan estadísticas de fotogramas para animaciones de ventanas y contenido. Estos métodos te permiten escribir pruebas de instrumentación para evaluar si se está renderizando una app. fotogramas a una frecuencia de actualización suficiente para brindar una experiencia del usuario fluida. - La nueva herramienta
executeShellCommand()
te permite ejecutar comandos de shell desde tu prueba de instrumentación. El la ejecución de comandos es similar a ejecutaradb shell
desde un host que están conectados al dispositivo, lo que te permite usar herramientas basadas en shells, comodumpsys
,am
,content
ypm
. - Servicios de accesibilidad y herramientas de prueba que usan las APIs de accesibilidad
(como
UiAutomator
) Ahora puedes recuperar información detallada sobre las propiedades de las ventanas en la pantalla con la que pueden interactuar los usuarios videntes. Para recuperar una lista deAccessibilityWindowInfo
, llama al nuevogetWindows()
. - El nuevo
AccessibilityNodeInfo.AccessibilityAction
te permite definir acciones estándar o personalizadas para realizar en unaAccessibilityNodeInfo
El nuevoAccessibilityNodeInfo.AccessibilityAction
reemplaza a las APIs relacionadas con acciones que se encontraban previamente enAccessibilityNodeInfo
- Android 5.0 ofrece un control más detallado de la síntesis de texto a voz en
tu app. La nueva clase
Voice
permite que tu app haga lo siguiente: Utilizar perfiles de voz asociados con configuraciones regionales específicas, calidad y latencia calificación y los parámetros específicos del motor de texto a voz.
IME
Simplificación del cambio de idiomas de escritura
A partir de Android 5.0, los usuarios pueden cambiar más fácilmente entre
Todas las entradas
editores de métodos (IME) compatibles con la plataforma. Realizar las tareas
ciclos de acción de cambio (por lo general, tocar un ícono de globo terráqueo en el teclado en pantalla)
a través de todos esos IME. A este cambio de comportamiento lo implementa el
shouldOfferSwitchingToNextInputMethod()
.
Además, el framework ahora comprueba si el próximo IME incluye un
mecanismo de cambio (y, por lo tanto, si ese IME admite el cambio a
el IME posterior). Los
Un IME con un mecanismo de cambio no pasará a un IME que no lo tenga. Esta
el cambio de comportamiento es implementado por el
switchToNextInputMethod()
.
Para ver un ejemplo de cómo utilizar las APIs de cambio de IME actualizadas, consulta el ejemplo de implementación de teclado en pantalla actualizado en esta versión. Para obtener más información sobre cómo implementar el cambio entre IME, consulta Cómo crear un método de entrada.
Declaraciones de manifiesto
Funciones requeridas declarables
Ahora se admiten los siguientes valores en el
<uses-feature>
para garantizar que tu app se instale solo en dispositivos que
proporcionar las funciones que tu app necesita.
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
Permisos del usuario
Ahora se admite el siguiente permiso
<uses-permission>
para declarar los permisos que requiere tu app para acceder a determinadas APIs.
BIND_DREAM_SERVICE
: Cuando se orienta a la API nivel 21 o superior, un Daydream, para garantizar que solo el sistema pueda vincularse.