API de Android 6.0

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

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:

  1. Instala la Revisión de herramientas de Android SDK versión 24.3 si todavía no lo hiciste.
  2. Inscribe una huella dactilar nueva en el emulador desde Configuración > Seguridad > Fingerprint y, luego, sigue las instrucciones de inscripción.
  3. 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 de finger 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

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:

  1. Implementa la interfaz de Application.OnProvideAssistDataListener.
  2. Registra este objeto de escucha con registerOnProvideAssistDataListener()
  3. Para proporcionar información contextual específica de la actividad, anula el onProvideAssistData() y, opcionalmente, la nueva onProvideAssistContent() 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.

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:

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() muestra BUTTON_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 Es BUTTON_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 y AudioTrack.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 objeto InputDevice de esa devolución de llamada y, luego, llama al Nuevo método hasMicrophone()
  • 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 un AudioDeviceCallback 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:

  1. Llama al método dequeueInputImage().
  2. Completa los datos en el búfer de entrada.
  3. 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.
  • 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 llamar onChoosePrivateKeyAlias() 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:
  • Un dispositivo móvil que muestra la función de notificación sobre el estado de trabajo en Android for Work
  • 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.