Skip to content

Most visited

Recently visited

navigation

Android 6.0 API

Android 6.0 (M) ofrece nuevas funciones para los usuarios y desarrolladores de apps. En este documento, se brinda una introducción sobre las API más distinguidas.

Iniciar el desarrollo

A fin de comenzar a crear apps para Android 6.0, primero debes obtener Android SDK. Luego, debes usar SDK Manager para descargar las imágenes de sistema y la plataforma de SDK de Android 6.0.

Actualiza el nivel de tu API de destino

A fin de optimizar mejor tu app para dispositivos con Android, fija tu targetSdkVersion en "23", instala la app en una imagen del sistema Android, pruébala y luego publica la app actualizada con este cambio.

Puedes usar Android API y, al mismo tiempo, mantener la compatibilidad con versiones anteriores agregando a tu código condiciones que comprueben el nivel de API del sistema antes de ejecutar las API no admitidas por el atributo minSdkVersion. Para obtener más información sobre cómo mantener la compatibilidad con versiones anteriores, consulta Compatibilidad con versiones de plataforma diferentes.

Para obtener más información sobre el funcionamiento de los niveles de API, consulta ¿Qué es un nivel de API?.

Autenticación por huellas dactilares

En esta versión se ofrecen nuevas API que te permiten autenticar usuarios a través del escaneo de sus huellas dactilares en dispositivos compatibles. Usa estas API junto con el sistema Android Keystore.

Para autenticar usuarios mediante el escaneo de huellas dactilares, obtén una instancia de la nueva clase FingerprintManager y llama al método authenticate(). Tu app se debe usarse en un dispositivo compatible con un sensor de huellas digitales. Debes implementar la interfaz de usuario para el flujo de autenticación por huellas dactilares 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 diálogo de huella dactilar. Si desarrollas varias apps en las que se usa autenticación por huellas dactilares, debes tener en cuenta que cada app debe autenticar la huella dactilar del usuario de manera independiente.

Para usar esta función en tu app, primero agrega el permiso USE_FINGERPRINT en tu manifiesto.

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />

Para ver la manera en que una app implementa la autenticación por huellas dactilares, consulta el ejemplo de diálogo de huella dactilar. Para ver una demostración de la manera en que puedes usar estas API de autenticación con otras Android API, mira el video Fingerprint y Payment API.

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. Registra una huella dactilar nueva en el emulador; para hacerlo, ve a Settings > Security > Fingerprint y luego sigue las instrucciones de registro.
  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 bloqueada o en tu app.
    adb -e emu finger touch <finger_id>
    

    En Windows, posiblemente 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 función evita que los usuarios tengan que recordar contraseñas adicionales específicas de la app y elimina la necesidad de implementar tu propia interfaz de usuario de autenticación. Tu app debe usar esta función con una implementación de clave pública o secreta para la autenticación del usuario.

Para definir 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 haya autenticado correctamente, llama al nuevo método setUserAuthenticationValidityDurationSeconds() cuando configures KeyGenerator o KeyPairGenerator.

Evita mostrar el diálogo de nueva autenticación de forma excesiva: tus apps deben intentar usar el objeto criptográfico primero y, si se agota el tiempo de espera, deben aplicar el método createConfirmDeviceCredentialIntent() para volver a autenticar el usuario dentro de tu app.

Para ver la manera en que la app implementa esta función, consulta la sección Ejemplo de cómo confirmar la credencial.

Vínculos 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. Según esta asociación, la plataforma puede determinar la app predeterminada que se debe usar para controlar un vínculo web en particular y omitir el paso en el cual se solicita a los usuarios que seleccionen una app. Para obtener información sobre la manera de implementar esta función, consulta Cómo manejar vínculos de apps.

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 tener Android 6.0 (nivel de API 23) como destino para habilitar este comportamiento; no necesitas agregar ningún otro código. Si los usuarios borran sus cuentas de Google, también se eliminarán sus datos de copias de seguridad. Para obtener información sobre cómo funciona esta función y cómo configurar qué elementos incluir en la copia de seguridad del sistema de archivo, consulta Cómo configurar Auto Backup for Apps.

Direct Share

Esta versión te proporciona API para que los usuarios puedan compartir contenido de manera rápida e intuitiva. Ahora puedes definir destinos para compartir de forma directa que inician una actividad específica en tu app. Estos destinos se exponen a los usuarios mediante el menú Share. Esta función permite a los usuarios compartir contenido con los destinos, como los contactos, dentro de otras apps. Por ejemplo, el destino para compartir de forma directa podría iniciar una actividad en otra app de red social, lo cual permite al usuario compartir contenido directamente con una comunidad o un amigo específico de esa app.

A fin de habilitar destinos directos para compartir, debes definir una clase que extienda la clase ChooserTargetService. Declara tu servicio en el manifiesto. En esa declaración, especifica el permiso BIND_CHOOSER_TARGET_SERVICE y un filtro de intents con la acción SERVICE_INTERFACE.

En el ejemplo siguiente se muestra la manera en que podrías declarar 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 que desees exponer a ChooserTargetService, agrega un elemento <meta-data> con el nombre "android.service.chooser.chooser_target_service" en el manifiesto de tu 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

En esta versión se proporciona una nueva API de interacción de voz que, junto con las acciones de voz, te permite crear experiencias de voz naturales en tus apps. Llama al método isVoiceInteraction() para determinar si una acción de voz activó tu actividad. De ser así, tu app puede usar la clase VoiceInteractor para solicitar una confirmación de voz por parte del usuario y realizar una selección en una lista de opciones, entre otras alternativas.

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 también puede, sin embargo, iniciarse sin la entrada del usuario. Por ejemplo, otra app iniciada por medio de una interacción de voz también puede enviar una intent para iniciar una interacción de voz. Para determinar si tu actividad se inició a partir de una búsqueda por voz del usuario o de otra app de interacción de voz, llama al método isVoiceInteractionRoot(). Si otra app inició tu actividad, el método muestra false. Tu app puede, entonces, solicitar al usuario que confirme si esta acción era la deseada.

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. Si deseas aplicar esta función, el usuario debe habilitar el asistente para emplear el contexto actual. Una vez habilitado este, para invocarlo dentro de cualquier app el usuario debe mantener presionado el botón Home.

Tu app puede optar por no compartir el contexto actual con el asistente configurando el indicador FLAG_SECURE. Además del conjunto de información estándar que la plataforma transmite al asistente, tu app puede compartir información adicional usando la nueva clase AssistContent.

Para proporcionar al asistente contexto adicional desde tu app, sigue estos pasos:

  1. Implementa la interfaz Application.OnProvideAssistDataListener.
  2. Registra este receptor usando registerOnProvideAssistDataListener().
  3. Para proporcionar información contextual específica de la actividad, anula el callback onProvideAssistData() y, opcionalmente, el nuevo callback onProvideAssistContent().

Dispositivos de almacenamiento adoptables

Con esta versión, los usuarios pueden adoptar dispositivos de almacenamiento externo, como tarjetas SD. Al adoptar un dispositivo de almacenamiento externo, el dispositivo se encripta y se formatea para funcionar como un elemento de almacenamiento interno. Esta función permite a los usuarios mover tanto las apps como los datos privados de esas apps de un dispositivo de almacenamiento a otro. Al mover apps, el sistema respeta la preferencia android:installLocation del manifiesto.

Si tu app accede a las API o los campos siguientes, ten en cuenta que las rutas de acceso a archivos que muestran cambiarán dinámicamente 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 conectada a un dispositivo Android mediante un cable USB On-The-Go (OTG) ejecutando el siguiente 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 sincronizar y conectar una pluma stylus Bluetooth compatible con su teléfono o tablet. Mientras esta se halla conectada, la información de posición de la pantalla táctil se fusiona con la información de los botones y la presión de la pluma stylus para proporcionar una mayor variedad de expresiones que al utilizar solamente la pantalla táctil. Tu app puede obedecer cuando se presiona el botón de la pluma stylus y cuando se realizan acciones secundarias, al registrar los objetos View.OnContextClickListener y GestureDetector.OnContextClickListener en tu actividad.

Usa las constantes y los métodos MotionEvent para detectar las interacciones del botón de la pluma stylus:

Exploración mejorada de Bluetooth de bajo consumo

Si tu app realiza exploraciones de Bluetooth de bajo consumo, usa el nuevo método setCallbackType() para especificar que deseas que el sistema notifique callbacks cuando encuentre por primera vez un paquete de publicidad que coincida con el conjunto ScanFilter o cuando lo vea luego de un tiempo prolongado. Este enfoque de exploración es más eficaz en términos de consumo de energía que el de 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 proporcionar credenciales de Hotspot 2.0 en tu app, usa los métodos nuevos de la clase WifiEnterpriseConfig, como setPlmn() y setRealm(). En el objeto WifiConfiguration, puedes configurar los campos FQDN y providerFriendlyName. El nuevo método isPasspointNetwork() indica si una red detectada representa un punto de acceso de Hotspot 2.0.

Modo de pantalla 4K

Ahora, la plataforma permite que las apps soliciten que la resolución de pantalla se actualice a una representación 4K en el hardware compatible. Para consultar la resolución física actual, usa las nuevas Display.Mode API. Si la IU se establece en una resolución lógica más baja y esta última se aumenta a valores más altos, ten en cuenta que la resolución física que muestra el método getPhysicalWidth() puede ser diferente de la resolución lógica informada por getSize().

Puedes solicitar al sistema que cambie la resolución física de tu app mientras se ejecuta configurando la propiedad preferredDisplayModeId de la ventana de tu app. Esta función resulta útil si deseas aplicar un cambio a la resolución de pantalla 4K. Mientras se encuentra en el modo de pantalla 4K, la IU se continúa representando en la resolución original (por ejemplo, 1080p) y se aumenta a 4K, pero los objetos SurfaceView pueden mostrar contenido en la resolución nativa.

ColorStateLists para poder aplicar temas

Ahora, los atributos de tema son compatibles en ColorStateList para los dispositivos con Android 6.0 (nivel de API 23). Se ha discontinuado el uso de los métodos Resources.getColorStateList() y Resources.getColor(). Si deseas llamar a estas API, como alternativa, llama a los métodos nuevos Context.getColorStateList() o Context.getColor(). Estos métodos también se encuentran disponibles en la biblioteca appcompat v4 vía ContextCompat.

Características de audio

En esta versión se agregan mejoras al procesamiento de audio en Android. Se incluye lo siguiente:

Características de video

En esta versión se agregan nuevas capacidades a las API de procesamiento de video, como las siguientes:

Características de la cámara

En esta versión se incluyen las siguientes API nuevas para acceder a la luz de flash de la cámara y para el reprocesamiento de imágenes esta:

Flashlight API

Si un dispositivo de cámara cuenta con una unidad de flash, puedes llamar al método setTorchMode() para activar o desactivar el modo linterna de una unidad de flash sin abrir el dispositivo de cámara. La app no tiene propiedad exclusiva de la unidad de flash ni del dispositivo de cámara. El modo linterna se desactiva y deja de estar disponible cuando la cámara no se encuentra disponible o cuando otros recursos de esta que mantienen la linterna encendida dejan de estar disponibles. Otras apps también pueden llamar a setTorchMode() para desactivar el modo linterna. Cuando se cierra la última app que activó el modo linterna, este modo se desactiva.

Si deseas registrar un callback para recibir una notificación sobre el estado del modo linterna, llama al método registerTorchCallback(). La primera vez que se registra el callback, se llama inmediatamente con el estado del modo linterna de todos los dispositivos de cámara con unidad de flash que se conocen actualmente. Si el modo linterna se activa o desactiva correctamente, se invoca al método onTorchModeChanged().

Reprocessing API

La Camera2 API se extiende para admitir el reprocesamiento de imágenes privadas de formato opaco y YUV. Para determinar si estas capacidades de reprocesamiento se encuentran disponibles, llama a getCameraCharacteristics() y comprueba la clave REPROCESS_MAX_CAPTURE_STALL. Si un dispositivo admite reprocesamiento, puedes crear una sesión de captura de cámara reprocesable llamando a 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 entrada de reprocesamiento de la cámara. 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 método queueInputImage().

Si usas un objeto ImageWriter junto con una imagen PRIVATE, tu app no puede acceder a los datos de la imagen de forma directa. En cambio, pasa la imagen PRIVATE directamente a ImageWriter llamando al método queueInputImage() sin ninguna copia del búfer.

La clase ImageReader ahora admite secuencias de imagen de formato PRIVATE. Esta compatibilidad permite a tu app mantener una cola circular de imágenes de salida ImageReader, seleccionar una o más imágenes y enviarlas 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:

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)