Android13 --- Adaptación de cambio de función

Sitio para desarrolladores de Android T (cambios de funciones):

Características y descripción general de API | Desarrolladores de Android | Desarrolladores de Android

1. Eficiencia laboral del desarrollador

1. Nueva interfaz de copiar y pegar

(1) Evite mostrar notificaciones duplicadas

Para evitar mostrar pantallas de confirmación de copia duplicadas en Android 13, intente usar un código como este:

Método de Comprobación:

Después de llamar a setPrimaryClip, aparecerá el escenario de copia exitosa.

  private void copyContent() {
          final Editable text = getText();
          int textLength = text.length();
          setSelection(0, textLength);
          ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(
                  Context.CLIPBOARD_SERVICE);
          clipboard.setPrimaryClip(ClipData.newPlainText(null, text));
          Toast.makeText(getContext(), R.string.text_copied_toast, Toast.LENGTH_SHORT).show();
          setSelection(textLength);
      }

Método correspondiente:

En las versiones de Android 12 y anteriores, se permite que aparezcan mensajes del sistema. En versiones superiores a Android 13, no aparecen mensajes del sistema.

private void copyContent() {
          final Editable text = getText();
          int textLength = text.length();
          setSelection(0, textLength);
          ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(
                  Context.CLIPBOARD_SERVICE);
          clipboard.setPrimaryClip(ClipData.newPlainText(null, text));
          if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
              Toast.makeText(getContext(), R.string.text_copied_toast, Toast.LENGTH_SHORT).show();
          }
          setSelection(textLength);
      }

(2) Agregar contenido confidencial al portapapeles

Si su aplicación permite a los usuarios copiar contenido confidencial (como contraseñas o información de tarjetas de crédito) al portapapeles, debe agregar una marca a ClipDescription de ClipData antes de llamar a ClipboardManager#setPrimaryClip(). Agregue esta marca para evitar que aparezca contenido confidencial en la vista previa del contenido.

Método de Comprobación:

ClipboardManager se utiliza en la lógica del código original y se procesa información confidencial, --> "android.content.extra.IS_SENSITIVE"

Método correspondiente:

// API 33及33以上

ClipDescription clipDescription = clip.getDescription();

PersistableBundle persistableBundle = new PersistableBundle();
persistableBundle.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true);
clipDescription.setExtras(persistableBundle);
// API 33 以下

ClipDescription clipDescription = clip.getDescription();

PersistableBundle persistableBundle = new PersistableBundle();
persistableBundle.putBoolean("android.content.extra.IS_SENSITIVE", true);
clipDescription.setExtras(persistableBundle);

2. Gesto de retorno predictivo

Las API KeyEvent.KEYCODE_BACK y onBackPressed están en desuso

A partir de Android 13 Final, esta animación de regreso a la pantalla de inicio se puede probar habilitando las opciones de desarrollador

Métodos de prueba:

Configuración > Sistema > Opciones de desarrollador

Seleccione animaciones predictivas de gestos hacia atrás

Inicie la aplicación actualizada, luego realice el gesto de retorno para ver el efecto real.

Método correspondiente:

(1) Actualizar aplicaciones que utilizan la navegación de retorno predeterminada

Si su aplicación no ha implementado previamente ningún comportamiento de retroceso personalizado (en otras palabras, el sistema maneja la navegación hacia atrás), puede habilitar gestos de retroceso predictivos simplemente configurando el indicador android:enableOnBackInvokedCallback en verdadero en la etiqueta <application> de AndroidManifest. xml .

Si no se proporciona ningún valor, el valor predeterminado es falso y deshabilita los gestos de retorno predictivos.

(2) Actualizar aplicaciones que utilizan navegación de retorno personalizada

①Usó Android X Con respecto a la navegación de retorno, usó las API de AndroidX.

Adecuado para aplicaciones nuevas o existentes que usan OnBackPressedDispatcher para implementar un manejo de navegación por gestos personalizado.

Como se describe en Proporcionar navegación hacia atrás personalizada .

En resumen, no se agregan botones de retorno redundantes a la interfaz de la aplicación, pero se sigue la pila de retorno de destino mantenida por Android.

En este caso, el gesto de retorno predictivo está habilitado como se describe en (16, B).

② Si se usa Android X, pero se implementa o se hace referencia a la API de navegación de retorno no compatible, se debe usar la API de AndroidX para admitir el nuevo comportamiento.

Para migrar API no compatibles a API de AndroidX:

a. Migre la lógica de procesamiento de navegación de retorno del sistema a OnBackPressedDispatcher de AndroidX implementando OnBackPressedCallback . Para obtener orientación detallada, consulte Proporcionar navegación hacia atrás personalizada .

b. Si necesita dejar de interceptar la navegación de retorno del sistema, deshabilite todas las instancias de OnBackPressedCallback previamente habilitadas o no habilite ninguna devolución de llamada en ningún momento.

C. Después de migrar exitosamente su aplicación, elija habilitar gestos de retorno predictivos como se describe en este (16, B).

③ Si no usa Android X, pero usa una API no compatible para implementar o hacer referencia a la navegación hacia atrás personalizada, debe migrar a la API de la plataforma OnBackInvokedCallback.

Complete los siguientes pasos para migrar API no compatibles a API de plataforma:

a. Utilice la nueva API OnBackInvokedCallback en dispositivos con Android 13 o superior, y confíe en API no compatibles en dispositivos con Android 12 o inferior.

B. Utilice la lógica del método onBackInvoked para registrar la lógica de devolución personalizada en OnBackInvokedCallback . Esto evita que se complete la actividad actual y le brinda a su devolución de llamada la oportunidad de responder a la operación de devolución después de que el usuario complete la navegación de retorno del sistema.

c. Para garantizar que las mejoras futuras en la navegación hacia atrás del sistema sean compatibles correctamente, su aplicación debe cancelar el registro de OnBackInvokedCallback. De lo contrario, los usuarios pueden ver un comportamiento no deseado al utilizar la navegación hacia atrás del sistema, como quedarse "atascado" entre vistas y forzar el cierre de la aplicación.

d. Después de migrar exitosamente la aplicación, use el gesto de retorno predictivo como se describe en (16,B)

3. Íconos de aplicaciones temáticas

Método correspondiente:

Agregue el atributo monocromo android:drawable al elemento <adaptive-icon>.

Por ejemplo, en res/mipmap-anydpi-v26/ic_launcher.xml:

<adaptive-icon >
    <background android:drawable="..." />
    <foreground android:drawable="..." />
    <monochrome android:drawable="@drawable/myicon" />
</adaptive-icon>

En el archivo de manifiesto, use android:icon para definir el ícono:

<application
    …
    android:icon="@mipmap/ic_launcher"
    …>
</application>

Nota: Si su manifiesto contiene android:roundIcon y android:icon, debe eliminar la referencia a android:roundIcon o proporcionar un ícono de un solo color en un elemento de diseño definido por el atributo android:roundIcon.

4. API de ubicación de configuración rápida

La Configuración rápida en la barra de notificaciones permite a los usuarios cambiar fácilmente la configuración o realizar acciones rápidas sin salir del contexto de la aplicación.

TileService proporciona a los usuarios un mosaico que se puede agregar a la Configuración rápida.

TileService será detectado por mosaicos que coincidan con .ACTION_QS_TILE y requieran el permiso "android.permission.BIND_QUICK_SETTINGS_TILE".

<service
     android:name=".MyQSTileService"
     android:label="@string/my_default_tile_label"
     android:icon="@drawable/my_default_icon_label"
     android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
     <intent-filter>
         <action android:name="android.service.quicksettings.action.QS_TILE" />
     </intent-filter>
 </service>

5. Proporcionar un mejor soporte para usuarios multilingües

(1) Configuración del sistema: permite a los usuarios seleccionar el idioma preferido para cada aplicación en una ubicación

①Cree un archivo llamado res/xml/locales_config.xml y especifique el idioma de su aplicación

<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
   <locale android:name="ja"/>
   <locale android:name="fr"/>
   <locale android:name="en"/>
</locale-config>

②En el manifiesto, agregue una línea de código que apunte a este nuevo archivo:

<manifest
    ...
    <application
        ...
        android:localeConfig="@xml/locales_config">
    </application>
</manifest>

Establecer a través de:

①Acceso a través de la configuración del sistema

Configuración > Sistema > Idioma y entrada > Idiomas de la aplicación > (Seleccione una aplicación)

②Acceso a través de la configuración de la aplicación

Configuración > Aplicaciones > (selecciona una aplicación) > Idioma

(2) Ajuste de línea de texto japonés mejorado

TextView puede ajustar texto según Bunsetsu (la unidad de morfema natural más pequeña) o frases en lugar de caracteres, haciendo que la interfaz de las aplicaciones japonesas sea más hermosa y fácil de leer.

Agregue el atributo android:lineBreakWordStyle="phrase" al control TextView

(3) Se mejoró la altura de línea de las letras no latinas.

La nueva altura de línea evita que los caracteres se recorten y mejora la ubicación de los mismos.

(4), API de conversión de texto (relacionada con IME)

①Ingrese Hiragana como la pronunciación de su término de búsqueda (como el nombre de un lugar o una aplicación)

②Convierta caracteres Hiragana a Kanji usando el teclado

③Buscar nuevamente usando caracteres kanji japoneses

④Finalmente obtenga los resultados de la búsqueda

Usando la nueva API de conversión de texto, los usuarios japoneses pueden ingresar hiragana y ver inmediatamente resultados de búsqueda de kanji en tiempo real sin tener que pasar por los pasos 2 y 3.

(5), actualización de la biblioteca Unicode

Dos cambios notables:

①Inglés (Canadá) en-CA e Inglés (Filipinas) en-PH utilizan el recurso de traducción en inglés (EE. UU.) en lugar del recurso de traducción en inglés (Reino Unido) en-GB cuando no hay ningún recurso de traducción disponible.

②La categoría plural muchos se introduce para el español es, el italiano it, el portugués pt y el portugués (Portugal) pt‑PT. Similar al francés introducido en CLDR v38 , esta categoría es adecuada para grandes cantidades.

6. Fuentes vectoriales coloridas

Android 13 admite la representación de fuentes COLR versión 1 (COLRv1) y actualiza los emojis del sistema al formato COLRv1.

COLRv1 es un formato de fuente nuevo y muy compacto que se reproduce de forma rápida y clara en cualquier tamaño.

Para la mayoría de las aplicaciones, el sistema maneja todo el trabajo y COLRv1 funciona bien.

Sin embargo, si su aplicación utiliza fuentes del sistema para su propia representación de texto, se recomienda que pruebe la representación de emoji.

7. Separe guiones más rápido

La separación de palabras hace que las líneas de texto separadas sean más fáciles de leer y ayuda a que la interfaz sea más receptiva.

Para habilitar una separación de palabras más rápida, utilice la nueva frecuencia fullFast o normalFast en setHyphenationFrequency() .

8. Audio Bluetooth LE

El audio Low Energy (LE) es una nueva generación de audio inalámbrico diseñado para reemplazar el Bluetooth tradicional y permitir nuevos casos de uso y topologías de conexión.

La tecnología permite a los usuarios compartir y reproducir contenido de audio con amigos y familiares, así como suscribirse a contenido de transmisión pública con fines informativos, de entretenimiento o de accesibilidad.

Esta nueva tecnología garantiza que los usuarios reciban audio de alta fidelidad sin tener que sacrificar la duración de la batería y también pueden cambiar sin problemas entre diferentes casos de uso, lo que no es posible con la tecnología Bluetooth tradicional.

9.MIDI 2.0

Soporte para el nuevo estándar MIDI 2.0, incluida la capacidad de conectar hardware MIDI 2.0 a través de USB.

Esta nueva versión del estándar tiene muchos beneficios, como una precisión mejorada del controlador, soporte mejorado para entonaciones no occidentales y expresividad mejorada al usar controladores de una sola nota.


2. Privacidad y seguridad

1. Exporte receptores registrados en contexto de forma más segura

Método de identificación:

El receptor de transmisión se registra dinámicamente en el código.

Método correspondiente:

En cada receptor de transmisión de su aplicación, indique explícitamente si otras aplicaciones pueden enviarle transmisiones:

// This broadcast receiver should be able to receive broadcasts from other apps.
// This option causes the same behavior as setting the broadcast receiver's
// "exported" attribute to true in your app's manifest.
context.registerReceiver(sharedBroadcastReceiver, intentFilter,
    RECEIVER_EXPORTED);

// For app safety reasons, this private broadcast receiver should **NOT**
// be able to receive broadcasts from other apps.
context.registerReceiver(privateBroadcastReceiver, intentFilter,
    RECEIVER_NOT_EXPORTED);

Solo pasando el parámetro RECEIVER_EXPORTED podrás recibir transmisiones de otras aplicaciones.

Si utiliza el parámetro RECEIVER_NOT_EXPORTED, incluso si otras aplicaciones envían transmisiones dirigidas, no se recibirán.

Si exporta un receptor de transmisión, otras aplicaciones podrán enviar transmisiones sin protección a su aplicación.

Nota: Si el cambio del marco de compatibilidad DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED está habilitado, se debe especificar RECEIVER_EXPORTED o RECEIVER_NOT_EXPORTED para cada receptor de transmisión.

De lo contrario, el sistema generará una excepción de seguridad cuando intente registrar un receptor de transmisión.

2. Selector de fotos

Cuando una aplicación inicia el selector de fotos, los usuarios pueden optar por compartir imágenes y videos específicos (como una foto de perfil) con la aplicación, en lugar de otorgarle permiso a la aplicación para ver toda la biblioteca multimedia.

Los selectores de fotos brindan una mayor privacidad a los usuarios porque su aplicación no necesita declarar ningún permiso de tiempo de ejecución. Además, el selector de fotografías proporciona una interfaz estandarizada integrada para aplicaciones, lo que crea una experiencia de usuario más consistente.

(1) Definir restricciones para compartir

// Launches photo picker in multi-select mode.
// This means that user can select multiple photos/videos, up to the limit
// specified by the app in the extra (10 in this example).
final int maxNumPhotosAndVideos = 10;
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos);
startActivityForResult(intent, );

EXTRA_PICK_IMAGES_MAX extra especifica el número máximo de fotos que deben mostrarse en el selector de fotos

(2) Procesamiento de los resultados del selector de fotografías

Establezca el tipo MIME en el método setType() para filtrar por "solo fotos" o "solo videos"

// Launches photo picker for videos only in single select mode.
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
intent.setType("video/*");//仅过滤视频类型
startActivityForResult(intent, );

3. Nuevos permisos de ejecución para dispositivos WiFi cercanos

Android 13 (nivel de API 33) introduce un nuevo permiso de tiempo de ejecución en el grupo de permisos NEARBY_DEVICES para aplicaciones que administran las conexiones de un dispositivo a puntos de acceso Wi-Fi cercanos.

Estas aplicaciones deben declarar el nuevo permiso NEARBY_WIFI_DEVICES al llamar a varias API de Wi-Fi diferentes .

Siempre que la aplicación no deduzca la ubicación física a través de la API de Wi-Fi, no es necesario declararla cuando se apunta a Android 13 o superior.

declarar en manifiesto

<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />

4. Nuevos permisos para usar despertadores precisos

Si su aplicación está orientada a Android 13, puede usar el permiso USE_EXACT_ALARM que se otorga automáticamente a la aplicación (no está abierto a los usuarios).

Sin embargo, se debe cumplir al menos una de las siguientes condiciones:

① Es una aplicación de despertador o de temporizador.

② es una aplicación de calendario que muestra notificaciones de próximos eventos.

Si su aplicación configura una alarma de precisión que no cumple con ninguna de las condiciones que se muestran en la lista anterior,

En su lugar, continúe declarando el permiso SCHEDULE_EXACT_ALARM y prepárese para la situación en la que el usuario niegue el acceso a su aplicación.

5. Los desarrolladores pueden degradar los permisos

A partir de Android 13, las aplicaciones pueden revocar los permisos de ejecución otorgados previamente por el sistema o el usuario. Esta API permite que su aplicación realice tareas de mejora de la privacidad de la siguiente manera:

Revocar permisos no utilizados.

Siga las mejores prácticas de permisos para aumentar la confianza del usuario. Es posible que desee considerar mostrar un cuadro de diálogo al usuario que muestre los permisos que está revocando activamente.

Método correspondiente:

Para revocar un permiso de tiempo de ejecución específico, pase el nombre del permiso a revokeSelfPermissionOnKill() . Para revocar un conjunto de permisos de tiempo de ejecución al mismo tiempo, pase el nombre del conjunto de permisos a revokeSelfPermissionsOnKill() . Deshacer se produce de forma asincrónica y finaliza todos los procesos asociados con el UID de su aplicación.

Nota: Para que la configuración del sistema indique que su aplicación no accederá a los datos en un grupo de permisos específico, debe revocar todos los permisos en ese grupo de permisos. En este caso, puede resultar útil llamar a revokeSelfPermissionsOnKill().

6. Esquema de firma APK v3.1

Específicamente, el esquema de firma v3.1 permite que las aplicaciones admitan firmantes originales y firmantes rotativos en un solo APK. Además, la solución también admite la función de posicionamiento de la versión SDK, lo que permitirá la rotación para apuntar a una versión superior de la plataforma.

El esquema de firma v3.1 utiliza un nuevo ID de fragmento que no se reconoce en 12L o versiones anteriores. Por lo tanto, la plataforma aplica el siguiente comportamiento del firmante:

Los dispositivos que ejecutan Android 13 utilizarán firmantes rotativos en el fragmento v3.1.

Los dispositivos que ejecutan versiones anteriores de Android ignoran el firmante rotativo y utilizan el firmante original del fragmento v3.0.

Las aplicaciones que aún no han rotado sus claves de firma no necesitan realizar ninguna acción adicional. Siempre que se roten estas selecciones de aplicaciones, el nuevo esquema de firma v3.1 se aplicará de forma predeterminada.

7. Funciones mejoradas de informe de errores en keystore y KeyMint

Keystore y KeyMint ahora proporcionan indicadores de error más detallados y precisos para aplicaciones que generan claves. Agregamos una jerarquía de clases de excepción en java.security.ProviderException que contiene excepciones específicas de Android, incluidos los códigos de error Keystore/KeyMint , y si el error se puede volver a intentar. También puede modificar el método y el uso de generación de claves (firma, cifrado) para generar nuevas excepciones. Los informes de errores mejorados no se limitan a la generación de claves, ahora deberían proporcionarle lo que necesita para volver a intentar la generación de claves.

3. Soporte para tabletas y dispositivos de pantalla grande.

Android 13 se basa en las optimizaciones de tabletas introducidas en las actualizaciones de funciones de Android 12 y Android 12L

- Incluye optimizaciones de la interfaz del sistema, mejores capacidades multitarea y modo de compatibilidad mejorado. Bajo prueba

Durante las pruebas, asegúrese de que su aplicación se vea mejor en tabletas y otros dispositivos de pantalla grande.

4. Gráficos

1. Sombreadores programables

Android 13 añade soporte para objetos RuntimeShader programables cuyo comportamiento es utilizar gráficas de Android

Lenguaje de sombreado gráfico (AGSL). AGSL comparte la mayor parte de su sintaxis con GLSL, pero puede usarse en Android

El motor de renderizado se utiliza para personalizar el comportamiento de dibujo en el lienzo de Android y filtrar el contenido de la vista. Android incluido

Utilice estos sombreadores para lograr efectos dominó , desenfoque y desplazamiento extendido , y Android 13 le permite

Crea efectos avanzados similares para tu aplicación.

5. Medios

1. Enrutamiento de audio esperado

Para ayudar a las aplicaciones multimedia a determinar cómo se debe enrutar su audio, agregamos una nueva API de enrutamiento de audio a la clase AudioManager .

La nueva API getAudioDevicesForAttributes() permite recuperar una lista de dispositivos que se pueden usar para reproducir audio específico.

Se agregó getDirectProfilesForAttributes() para ayudarlo a comprender si una transmisión de audio se puede reproducir directamente.

Utilice estas nuevas API para determinar el mejor formato de audio que puede utilizar para sus pistas de audio.

6. Funciones de accesibilidad

1. Descripción de voz

Android 13 (nivel de API 33) introduce una nueva preferencia de accesibilidad en todo el sistema que permite a los usuarios habilitar descripciones de audio en todas las aplicaciones.

7. Funciones principales

1. Actualización de OpenJDK 11.

Android 13 comienza a actualizar las bibliotecas principales de Android para que sean coherentes con la versión OpenJDK 11 LTS.

También agrega actualizaciones de biblioteca y compatibilidad con el lenguaje Java 11 para desarrolladores de aplicaciones y plataformas. Introducido en Android 13

Los cambios de la biblioteca principal también se pueden actualizar al módulo ART Mainline a través del sistema Google Play para Android.

12 Uso del equipo.

Android 13 incluye los siguientes cambios en las bibliotecas principales:

  • Admite el uso  var de palabras clave para variables locales y como parámetros lambdas.
  • Nuevos métodos en la clase String:

    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • Soporte  Collection.toArray(IntFunction)para facilitar la adaptación de colecciones a arrays.

  • Apoyos  , ,  y   en  java.util clases  , ,  y  .OptionalOptionalDoubleOptionalIntOptionalLongifPresentOrElse()isEmpty()orElseThrow()stream()

  • Soporte ampliado  SocketOptions para incluir la reutilización de enchufes.

  • NullReaderLas funciones , NullWriter, InputStreamy OutputStream se  transferTo()Reader utilizan para transferir los caracteres leídos a  Writer.

  • Se agregó  Charsets la capacidad de utilizar codificación y decodificación de URL.

  •  Funciones  disponibles  para FileReader,  y   .FileWriterPrintStreamPrintWriterCharset

  •  Se han agregado   nuevas funciones  ,  y para or  ByteArrayInput y  OutputStream or  Input . OutputStreamtransferTo()readNBytes()readAllBytes()writeBytes()

  • Corregir  java.lang.invoke.VarHandle el tiempo de ejecución y el soporte del compilador.

  • El uso interno  VarHandle se  java.util.concurrent actualizará a la API OpenJDK 11.

Supongo que te gusta

Origin blog.csdn.net/m0_50408097/article/details/126143549
Recomendado
Clasificación