Android 6.0 (M) ofrece nuevas funciones para usuarios y desarrolladores de apps. En este documento, se brinda una introducción al APIs más destacadas.
Empezar a programar
Para comenzar a crear apps para Android 6.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 6.0.
Actualiza el nivel de tu API de destino
Para optimizar mejor tu app para dispositivos que ejecutan Android ,
establece tu targetSdkVersion
en
"23"
, instala tu app en un dispositivo Android
del sistema, pruébala y publica la app actualizada con
este cambio.
Puedes usar las APIs de Android y, al mismo tiempo, admitir
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?
Autenticación por huellas dactilares
Esta versión ofrece nuevas APIs que te permiten autenticar usuarios mediante el escaneo de huellas dactilares en compatibles, usa estas APIs junto con el sistema Android Keystore.
Para autenticar usuarios con el escaneo de huella digital, obtén una instancia del nuevo
FingerprintManager
y llama al
authenticate()
. La app se debe ejecutar en un dispositivo
dispositivo con sensor de huellas dactilares. Debes implementar la interfaz de usuario de la huella digital
de autenticación en tu app y usar el ícono de huella dactilar estándar de Android en la IU.
El ícono de huella dactilar de Android (c_fp_40px.png
) se incluye en el
Ejemplo de autenticación biométrica.
Si desarrollas varias apps que usan autenticación con huella digital, ten en cuenta que cada app debe
autenticar la huella digital del usuario de forma independiente.
Para usar esta función en tu app, primero agrega lo siguiente:
USE_FINGERPRINT
en tu manifiesto.
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
![Un dispositivo móvil que muestra la función de autenticación de huella digital](https://developer.android.com/static/images/android-6.0/fingerprint-screen.png?authuser=9&hl=es)
Para ver cómo una app implementa la autenticación por huella digital, consulta la Ejemplo de autenticación biométrica. Para ver una demostración de cómo usar estas reglas junto con otras Android API, mira el video API de Fingerprint y Payment.
Si estás evaluando esta función, sigue estos pasos:
- Instala la Revisión de herramientas de Android SDK versión 24.3 si todavía no lo hiciste.
- Inscribe una huella dactilar nueva en el emulador desde Configuración > Seguridad > Fingerprint y, luego, sigue las instrucciones de inscripción.
- Usa un emulador para emular eventos táctiles de huellas dactilares con el
siguiente comando. Usa el mismo comando para emular eventos táctiles de huellas dactilares en la pantalla de bloqueo
en tu app.
adb -e emu finger touch <finger_id>
En Windows, es posible que debas ejecutar
telnet 127.0.0.1 <emulator-id>
seguido definger touch <finger_id>
Confirmar credencial
Tu app puede autenticar usuarios según el tiempo que haya pasado desde que desbloquearon el dispositivo por última vez. Esta permite que los usuarios no tengan que recordar contraseñas adicionales específicas de la aplicación y evita la necesidad. para implementar tu propia interfaz de usuario de autenticación. Tu app debe usar esta función en en conjunto con una implementación de clave pública o secreta para la autenticación de usuarios.
Para establecer la duración del tiempo de espera en el que se puede volver a usar la misma clave después de que un usuario se registra correctamente
autenticado, llama al nuevo
setUserAuthenticationValidityDurationSeconds()
cuando configuras una instancia de KeyGenerator
o
KeyPairGenerator
Evita mostrar el cuadro de diálogo de reautenticación de manera excesiva: las aplicaciones deben intentar usar la
objeto criptográfico primero y, si vence el tiempo de espera, usa el
createConfirmDeviceCredentialIntent()
para volver a autenticar al usuario en tu app.
Vinculación de app
Esta versión mejora el sistema de intents de Android mediante vínculos de app más potentes. Esta función te permite asociar una app con un dominio web propio. Basado en esto de forma predeterminada, la plataforma puede determinar la app predeterminada que se debe usar para controlar un vínculo web y omitir el paso en el que se les solicitará a los usuarios que seleccionen una app. Para obtener información sobre cómo implementar esta función, consulta Controla los vínculos de la app.
Auto Backup for Apps
Ahora, el sistema realiza restauraciones y copias de seguridad de datos completas y automáticas para las apps. Tu app debe orientarse Android 6.0 (nivel de API 23) para habilitar este comportamiento no es necesario que agregues ningún código adicional. Si los usuarios borran sus cuentas de Google, también se eliminarán sus datos de copias de seguridad. Para saber cómo esto y cómo configurar qué elementos para crear una copia de seguridad en el sistema de archivos, consulta Cómo configurar la Copia de seguridad automática para aplicaciones.
Direct Share
![Parte inferior de un dispositivo móvil que muestra la funcionalidad de Direct Share](https://developer.android.com/static/images/android-6.0/direct-share-screen.png?authuser=9&hl=es)
Esta versión te proporciona API para que los usuarios puedan compartir contenido de manera rápida e intuitiva. Ahora puedes definir objetivos de uso compartido directo que inician una actividad específica en tu app Estos comparten directamente los destinos se exponen a los usuarios a través del menú Compartir. Esta función permite que los usuarios compartan contenido a los objetivos, como los contactos, dentro de otras aplicaciones. Por ejemplo, el objetivo de uso compartido directo podría Iniciar una actividad en otra aplicación de red social, lo que le permite al usuario compartir contenido directamente con una un amigo o una comunidad específicos en esa app.
Para habilitar objetivos de Direct Share, debes definir una clase que extienda el
Clase ChooserTargetService
. Declara tu
servicio en el manifiesto. Dentro de esa declaración, especifica el
permiso BIND_CHOOSER_TARGET_SERVICE
y un
de intents con el
SERVICE_INTERFACE
.
En el siguiente ejemplo, se muestra cómo podrías declarar el
ChooserTargetService
en tu manifiesto.
<service android:name=".ChooserTargetService" android:label="@string/service_name" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
Para cada actividad a la que quieras exponer
ChooserTargetService
, agrega
Elemento <meta-data>
con el nombre
"android.service.chooser.chooser_target_service"
en el manifiesto de la app.
<activity android:name=".MyShareActivity” android:label="@string/share_activity_label"> <intent-filter> <action android:name="android.intent.action.SEND" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ChooserTargetService" /> </activity>
Interacciones de voz
Esta versión ofrece una nueva API de interacción de voz que, junto con
Acciones de voz,
te permite compilar experiencias de voz conversacional en tus apps. Llama al
Método isVoiceInteraction()
para determinar si se activó una acción de voz
tu actividad. Si es así, tu app puede usar la
VoiceInteractor
para solicitar una confirmación de voz del usuario, selecciona
de una lista de opciones y más.
La mayoría de las interacciones de voz se originan a partir de la acción de voz de un usuario. Una actividad de interacción de voz puede
pero también pueden comenzar
sin la entrada del usuario. Por ejemplo, otra app que se inicia con una voz
interacción también puede enviar un intent para iniciar una interacción de voz. Para determinar si tu actividad
iniciada a partir de una consulta por voz del usuario o desde otra aplicación de interacción por voz, llama al
isVoiceInteractionRoot()
. Si otra app inició tu
el método muestra false
. Luego, tu app puede pedirle al usuario que confirme lo siguiente:
querían esta acción.
Para obtener más información sobre cómo implementar acciones de voz, consulta el Sitio para desarrolladores de Acciones de voz.
Assist API
Esta versión ofrece a los usuarios una nueva manera de interactuar con tus apps a través de un asistente. Para usar el usuario debe habilitar el asistente para usar el contexto actual. Una vez habilitada, el usuario puedes invocar al Asistente desde cualquier app si mantienes presionado el botón de inicio.
Tu app puede optar por no compartir el contexto actual con el Asistente estableciendo la
FLAG_SECURE
. Además del artículo
conjunto estándar de información que la plataforma pasa al asistente, tu app puede compartir
información adicional con la nueva clase AssistContent
Para proporcionar al asistente contexto adicional desde tu app, sigue estos pasos:
- Implementa la interfaz de
Application.OnProvideAssistDataListener
. - Registra este objeto de escucha con
registerOnProvideAssistDataListener()
- Para proporcionar información contextual específica de la actividad, anula el
onProvideAssistData()
y, opcionalmente, la nuevaonProvideAssistContent()
devolución de llamada.
Dispositivos de almacenamiento adoptables
Con esta versión, los usuarios pueden adoptar dispositivos de almacenamiento externo, como tarjetas SD. Adoptar una
El dispositivo de almacenamiento externo encripta y formatea el dispositivo para funcionar como un almacenamiento interno. Esta
permite que los usuarios muevan apps y datos privados de esas apps de un dispositivo de almacenamiento a otro. Cuándo
en movimiento, el sistema respeta la
android:installLocation
preferencia en el manifiesto.
Si tu app accede a los siguientes campos o APIs, ten en cuenta que las rutas de acceso a los archivos que devuelven cambiará de forma dinámica cuando la app se mueva entre dispositivos de almacenamiento interno y externo. Al compilar rutas de acceso a archivos, se recomienda enormemente que llames siempre a estas API de forma dinámica. No uses rutas de acceso a archivos codificadas ni continúes usando rutas de acceso a archivos completamente calificadas que se hayan compilado anteriormente.
- Métodos
Context
: - Campos
ApplicationInfo
:
Para depurar esta función, puedes habilitar la adopción de una unidad USB que tenga que esté conectado a un dispositivo Android a través de un cable USB On-The-Go (OTG) ejecutando este comando:
$ adb shell sm set-force-adoptable true
Notificaciones
En esta versión se agregan los siguientes cambios de API para las notificaciones:
- Nuevo nivel de filtro
INTERRUPTION_FILTER_ALARMS
que corresponde al nuevo modo No interrumpir de Solo alarmas. - Nuevo valor de categoría
CATEGORY_REMINDER
que se usa para Distinguir los recordatorios programados por el usuario de otros eventos (CATEGORY_EVENT
) y alarmas (CATEGORY_ALARM
). - Nueva clase de
Icon
que puedes adjuntar a tus notificaciones mediante elsetSmallIcon()
ysetLargeIcon()
. De forma similar, el El métodoaddAction()
ahora acepta un objetoIcon
en lugar de un drawable. - Nuevo método
getActiveNotifications()
que permite tu para descubrir cuáles de sus notificaciones se encuentran activas.
Compatibilidad con la pluma stylus Bluetooth
Esta versión ofrece una mejor compatibilidad con entradas de usuario realizadas con una pluma stylus Bluetooth. Los usuarios pueden vincular
y conectar una pluma stylus Bluetooth compatible con su teléfono o tablet. Mientras está conectado, posición
información de la pantalla táctil se fusiona con la información de los botones y la presión de la pluma stylus para
proporcionan un rango de expresión más amplio que con la pantalla táctil sola. Tu app puede detectar
presiona el botón de la pluma stylus y realiza acciones secundarias registrándote
View.OnContextClickListener
y
GestureDetector.OnContextClickListener
en tu actividad.
Usa las constantes y los métodos MotionEvent
para detectar el botón de la pluma stylus
interacciones:
- Si el usuario toca una pluma stylus con un botón en la pantalla de tu app, la
Devuelve el método
getTooltype()
TOOL_TYPE_STYLUS
- En el caso de las aplicaciones orientadas a Android 6.0 (nivel de API 23), la
getButtonState()
muestraBUTTON_STYLUS_PRIMARY
cuando el usuario presiona el botón principal de la pluma stylus. Si la pluma stylus tiene un segundo botón, el mismo método devuelve EsBUTTON_STYLUS_SECONDARY
cuando el usuario lo presiona. Si el usuario presiona ambos botones simultáneamente, el método devuelve ambos valores juntos con OR (BUTTON_STYLUS_PRIMARY
|BUTTON_STYLUS_SECONDARY
). -
En el caso de las aplicaciones orientadas a una versión anterior de la plataforma, el
Devuelve el método
getButtonState()
BUTTON_SECONDARY
(cuando se presiona el botón principal de la pluma stylus),BUTTON_TERTIARY
(cuando se presiona el botón de la pluma stylus secundaria) o ambas opciones.
Exploración mejorada de Bluetooth de bajo consumo
Si tu app realiza búsquedas de Bluetooth de bajo consumo, usa el nuevo
setCallbackType()
para especificar que deseas que el sistema notifique las devoluciones de llamada cuando encuentre o vea después de
durante mucho tiempo, un paquete de anuncios que coincide con el conjunto ScanFilter
. Esta
de escaneo es más eficiente en términos de energía que la que se proporciona en la versión anterior de la plataforma.
Compatibilidad con Hotspot 2.0 versión 1
Esta versión agrega compatibilidad para la especificación de Hotspot 2.0 versión 1 en los dispositivos Nexus 6 y Nexus 9. Para
aprovisionar credenciales de Hotspot 2.0 en tu app, usa los nuevos métodos de la
Clase WifiEnterpriseConfig
, como
setPlmn()
y
setRealm()
En la
WifiConfiguration
, puedes establecer la
FQDN
y las
providerFriendlyName
.
El nuevo método isPasspointNetwork()
indica si se detectó un
red representa un punto de acceso de Hotspot 2.0.
Modo de pantalla 4K
La plataforma ahora permite que las apps soliciten que la resolución de pantalla se actualice a una renderización en 4K.
en hardware compatible. Para consultar la resolución física actual, usa el nuevo
APIs de Display.Mode
. Si la IU se dibuja en una resolución lógica más baja y
a una resolución física mayor, ten en cuenta que la resolución física
Las devoluciones del método getPhysicalWidth()
pueden diferir de la lógica
resolución informada por getSize()
.
Puedes solicitar al sistema que cambie la resolución física de tu app mientras se ejecuta estableciendo
la propiedad preferredDisplayModeId
de la
en la ventana modal. Esta función resulta útil si deseas aplicar un cambio a la resolución de pantalla 4K. En pantalla 4K
, se seguirá renderizando la IU en la resolución original (como 1080p) y se aumentará a
4K, pero los objetos SurfaceView
pueden mostrar contenido en la resolución nativa.
ColorStateLists para poder aplicar temas
Los atributos de tema ahora se admiten en
ColorStateList
para dispositivos que ejecutan Android 6.0 (nivel de API 23) El
Resources.getColorStateList()
y
Se aplicaron Resources.getColor()
métodos
obsoleto. Si llamas a estas APIs, llama al nuevo método
Context.getColorStateList()
o
Context.getColor()
en su lugar. Estos métodos son
también está disponible en la biblioteca appcompat v4 a través de ContextCompat
.
Características de audio
En esta versión se agregan mejoras al procesamiento de audio en Android. Se incluye lo siguiente:
- Compatibilidad con MIDI
con las nuevas APIs de
android.media.midi
. Usa estas APIs para enviar y recibir datos MIDI eventos. AudioRecord.Builder
yAudioTrack.Builder
nuevos para crear objetos de captura y reproducción de audio digital, respectivamente, y configurar audio propiedades fuente y receptor para anular los valores predeterminados del sistema.- Enlaces de API para asociar dispositivos de entrada y de audio. Esto es particularmente útil si tu app
Permite a los usuarios iniciar una búsqueda por voz desde un controlador de juegos o un control remoto conectados a Android.
TV El sistema invoca el nuevo modelo
onSearchRequested()
cuando el usuario inicia una búsqueda. Para determinar si el dispositivo de entrada del usuario micrófono, recupera el objetoInputDevice
de esa devolución de llamada y, luego, llama al Nuevo métodohasMicrophone()
- Nuevo método
getDevices()
que te permite recuperar una lista de todos los dispositivos de audio conectados al sistema en ese momento También puedes registrar unAudioDeviceCallback
si quieres que el sistema notifique a tu app. Cuando se conecta o desconecta un dispositivo de audio.
Características de video
En esta versión se agregan nuevas capacidades a las API de procesamiento de video, como las siguientes:
- Nueva clase
MediaSync
que ayuda a las aplicaciones a renderizarse de forma síncrona transmisiones continuas de audio y video. Los búferes de audio se envían de manera que no generan bloqueo y se se muestra mediante una devolución de llamada. Además, se admite una velocidad de reproducción dinámica. - Nuevo evento
EVENT_SESSION_RECLAIMED
, que indica que un que abrió la app y que el administrador de recursos reclamó Si tu app usa sesiones de DRM, debes controlar este evento y asegurarte de no utilizar una sesión reclamada. - Nuevo código de error
ERROR_RECLAIMED
, que indica que el administrador de recursos reclamó el recurso multimedia utilizado por el códec. Con esta excepción, el el códec, ya que pasó al estado terminal. - Nueva interfaz
getMaxSupportedInstances()
para obtener una sugerencia de la cantidad máxima de instancias varias instancias de códecs simultáneas. - Nuevo método
setPlaybackParams()
para establecer la velocidad de reproducción de contenido multimedia para reproducción rápida o la reproducción en cámara lenta. También estira o acelera la reproducción de audio automáticamente en con el video.
Funciones de la cámara
Esta versión incluye las siguientes APIs nuevas para acceder a la linterna de la cámara y para reprocesamiento de imágenes por cámara:
Flashlight API
Si un dispositivo de cámara tiene una unidad de flash, puedes llamar a la
setTorchMode()
para activar o desactivar el modo linterna de la unidad de flash sin abrir el dispositivo de la cámara. La app
no tiene propiedad exclusiva de la unidad de flash ni del dispositivo de cámara. Se activó el modo linterna
desactivada y deja de estar disponible cuando la cámara no está disponible o cuando otra cámara
los recursos que mantienen la linterna encendida dejan de estar disponibles. Otras apps también pueden llamar
setTorchMode()
para desactivar el modo linterna. Cuando se cierra la última app que activó el modo linterna,
el modo esté desactivado.
Puedes registrar una devolución de llamada para recibir una notificación sobre el estado del modo linterna llamando al
registerTorchCallback()
. La primera vez que se registra la devolución de llamada, se llama inmediatamente con el modo linterna.
de todos los dispositivos de cámara con unidad de flash conocidos actualmente. Si el modo linterna está activado o
con éxito, el
onTorchModeChanged()
se invoque el método de pago.
Reprocessing API
La API de Camera2
se extiende para admitir YUV y privadas.
reprocesamiento de imágenes con formato opaco. Para determinar si estas capacidades de reprocesamiento están disponibles,
llama a getCameraCharacteristics()
y verifica si hay
Tecla REPROCESS_MAX_CAPTURE_STALL
. Si un
admite el reprocesamiento, puedes crear una sesión de captura de cámara reprocesable llamando
createReprocessableCaptureSession()
:
y crear solicitudes para el reprocesamiento de búferes de entrada.
Usa la clase ImageWriter
para conectar el flujo del búfer de entrada a la cámara.
reprocesar entradas. Para obtener un búfer vacío, sigue el modelo de programación que se indica a continuación:
- Llama al método
dequeueInputImage()
. - Completa los datos en el búfer de entrada.
- Envía el búfer a la cámara llamando al
queueInputImage()
.
Si usas un objeto ImageWriter
junto con un
PRIVATE
imagen, tu app no puede acceder a la imagen
datos directamente. En su lugar, pasa la imagen PRIVATE
directamente al
ImageWriter
llamando al
Método queueInputImage()
sin ninguna copia del búfer.
La clase ImageReader
ahora admite
Flujos de imagen en formato PRIVATE
. Esta compatibilidad permite que tu app
mantiene una cola de imágenes circular de ImageReader
imágenes de salida, selecciona una o
y envíalas a ImageWriter
para el reprocesamiento de la cámara.
Características de Android for Work
En esta versión se incluyen las siguientes API nuevas para Android for Work:
- Controles mejorados para dispositivos corporativos de uso único: El propietario del dispositivo
ahora puedes controlar los siguientes parámetros de configuración para mejorar la administración del
Dispositivos corporativos de uso único (COSU):
- Deshabilitar o volver a habilitar el bloqueo de teclado con el
setKeyguardDisabled()
. - inhabilitar o volver a habilitar la barra de estado (incluida la configuración rápida, las notificaciones y las
gesto de navegación y deslizar hacia arriba que inicia Google Now) con el
setStatusBarDisabled()
. - Inhabilita o vuelve a habilitar el inicio seguro con la constante
UserManager
.DISALLOW_SAFE_BOOT
- Evitar que se apague la pantalla mientras el dispositivo está conectado al
STAY_ON_WHILE_PLUGGED_IN
.
- Deshabilitar o volver a habilitar el bloqueo de teclado con el
- Instalación y desinstalación silenciosas de apps por parte del propietario del dispositivo: Ahora los propietarios de dispositivos pueden hacerlo.
instalar y desinstalar aplicaciones de forma silenciosa con el
PackageInstaller
APIs independientes de Google Play for Work. Ahora puedes aprovisionar dispositivos con un propietario de dispositivo recupera e instala apps sin interacción del usuario. Esta función es útil para habilitar la función de un toque aprovisionamiento de kioscos y otros dispositivos similares sin activar una Cuenta de Google. - Acceso silencioso al certificado empresarial: Cuando una app llama
choosePrivateKeyAlias()
, antes de que se le solicite al usuario que seleccione un certificado, el propietario del dispositivo o perfil ahora puede llamaronChoosePrivateKeyAlias()
para proporcionar el alias de forma silenciosa a la aplicación solicitante. Esta función te permite otorgar acceso de las apps administradas a los certificados sin interacción del usuario. - Aceptación automática de actualizaciones del sistema. Si estableces una política de actualización del sistema
setSystemUpdatePolicy()
, un propietario de dispositivo ahora puede aceptar automáticamente actualización, por ejemplo, en el caso de un dispositivo de kiosco, o posponer la actualización y evitar que se realice que realiza el usuario durante un máximo de 30 días. Además, un administrador puede establecer un período de tiempo diario en la que se debe realizar una actualización, por ejemplo, durante las horas en que el dispositivo de kiosco no está en uso. Cuándo hay una actualización del sistema disponible, el sistema verifica si la app del controlador de política del dispositivo configuró un sistema una política de actualización y se comporta en consecuencia. -
Instalación delegada de certificados: un propietario de dispositivo o perfil ahora puede otorgar un
en la app de terceros la capacidad de llamar a estos certificados de
DevicePolicyManager
API de Management: - Seguimiento del uso de datos. Ahora, un propietario de dispositivo o perfil puede consultar
estadísticas de uso de datos que se pueden ver en Configuración > de Google Cloud con el nuevo
NetworkStatsManager
. Los propietarios de perfiles reciben automáticamente permiso para consultar datos en el perfil que administran, mientras que los propietarios del dispositivo tienen acceso a los datos de uso del usuario principal administrado. - Administración de permisos de tiempo de ejecución:
Un propietario de dispositivo o perfil puede establecer una política de permisos para todas las solicitudes de entorno de ejecución de todas las aplicaciones que usan
setPermissionPolicy()
, para solicitar al usuario que otorgue el permiso, o bien otorgar automáticamente rechazar el permiso de forma silenciosa. Si estableces esta última política, el usuario no podrá modificar la selección realizada por el propietario del dispositivo o perfil dentro de la pantalla de permisos de la aplicación en Configuración. - VPN en Configuración: Ahora puedes ver las apps de VPN en Configuración > Más > VPN. Además, las notificaciones que acompañan el uso de la VPN ahora son específicas de la forma configurado. Para el propietario del perfil, las notificaciones son específicas según la configuración de la VPN. un perfil administrado, un perfil personal o ambos. Para un propietario de dispositivo, las notificaciones son en función de si la VPN se configura para todo el dispositivo.
- Notificación sobre el estado del trabajo: Ahora aparecerá un ícono de maletín en la barra de estado cada vez que sea necesario. una app del perfil administrado tiene una actividad en primer plano. Además, si el dispositivo está desbloqueado directamente para la actividad de una app en el perfil administrado, se muestra un aviso que notifica que está dentro del perfil de trabajo.
![Un dispositivo móvil que muestra la función de notificación sobre el estado de trabajo en Android for Work](https://developer.android.com/static/images/android-6.0/work-profile-screen.png?authuser=9&hl=es)