Android13 --- Adaptation au changement de fonction

Site des développeurs Android T (modifications des fonctionnalités) :

Présentation des fonctionnalités et de l'API | Développeurs Android | Développeurs Android

1. Efficacité du travail du développeur

1. Nouvelle interface copier-coller

(1) Évitez d'afficher des notifications en double

Pour éviter d'afficher des écrans de confirmation de copie en double dans Android 13, essayez d'utiliser un code comme celui-ci :

Mode de paiement :

Après avoir appelé setPrimaryClip, le scénario toast d'une copie réussie apparaîtra.

  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éthode correspondante :

Dans les versions d'Android 12 et inférieures, les invites toast sont autorisées à apparaître. Dans les versions supérieures à Android 13, les invites toast ne s'affichent pas.

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) Ajouter du contenu sensible au presse-papiers

Si votre application permet aux utilisateurs de copier du contenu sensible (tel que des mots de passe ou des informations de carte de crédit) dans le presse-papiers, vous devez ajouter un indicateur à la ClipDescription de ClipData avant d'appeler ClipboardManager#setPrimaryClip(). Ajoutez cet indicateur pour empêcher le contenu sensible d'apparaître dans l'aperçu du contenu.

Mode de paiement :

ClipboardManager est utilisé dans la logique du code d'origine et les informations sensibles sont traitées, --> "android.content.extra.IS_SENSITIVE"

Méthode correspondante :

// 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. Geste de retour prédictif

Les API KeyEvent.KEYCODE_BACK et onBackPressed sont obsolètes

À partir d'Android 13 Final, cette animation de retour à l'écran d'accueil peut être testée en activant les options de développement

Méthodes d'essai:

Paramètres > Système > Options du développeur

Sélectionnez Animations prédictives des gestes du dos

Lancez l'application mise à jour, puis effectuez le geste de retour pour voir l'effet réel.

Méthode correspondante :

(1) Mettre à jour les applications qui utilisent la navigation de retour par défaut

Si votre application n'a pas encore implémenté de comportement de retour personnalisé (en d'autres termes, la navigation arrière est gérée par le système), vous pouvez activer les gestes de retour prédictifs en définissant simplement l'indicateur android:enableOnBackInvokedCallback sur true dans la balise <application> d' AndroidManifest. XML .

Si aucune valeur n'est fournie, la valeur par défaut est false et désactive les gestes de retour prédictifs.

(2) Mettre à jour les applications qui utilisent la navigation de retour personnalisée

①Utilisé Android X Concernant la navigation de retour, utilisé les API AndroidX

Convient aux applications nouvelles ou existantes qui utilisent OnBackPressedDispatcher pour implémenter une gestion personnalisée de la navigation gestuelle.

Comme décrit dans Fournir une navigation arrière personnalisée .

En bref, aucun bouton de retour redondant n'est ajouté à l'interface de l'application, mais la pile de retour de destination maintenue par Android est suivie.

Dans ce cas, le geste de retour prédictif est activé comme décrit en (16, B).

② Si Android X est utilisé, mais que l'API de navigation de retour non prise en charge est implémentée ou référencée, l'API AndroidX doit être utilisée à la place pour prendre en charge le nouveau comportement.

Pour migrer des API non prises en charge vers les API AndroidX :

a. Migrez la logique de traitement de navigation de retour du système vers OnBackPressedDispatcher d'AndroidX en implémentant OnBackPressedCallback . Pour obtenir des conseils détaillés, consultez Fournir une navigation arrière personnalisée .

b. Si vous devez arrêter d'intercepter la navigation de retour du système, veuillez désactiver toutes les instances OnBackPressedCallback précédemment activées ou n'activer aucun rappel à aucun moment.

c. Après avoir migré avec succès votre application, veuillez choisir d'activer les gestes de retour prédictifs comme décrit dans ceci (16, B).

③ Si vous n'utilisez pas Android X, mais utilisez une API non prise en charge pour implémenter ou référencer une navigation arrière personnalisée, vous devez migrer vers l'API de la plateforme OnBackInvokedCallback.

Effectuez les étapes suivantes pour migrer les API non prises en charge vers les API de plateforme :

a. Utilisez la nouvelle API OnBackInvokedCallback sur les appareils exécutant Android 13 ou version ultérieure, et comptez sur des API non prises en charge sur les appareils exécutant Android 12 ou version ultérieure.

b. Utilisez la logique de la méthode onBackInvoked pour enregistrer une logique de retour personnalisée dans OnBackInvokedCallback . Cela empêche l'activité en cours de se terminer et donne à votre rappel une chance de répondre à l'opération de retour une fois que l'utilisateur a terminé la navigation de retour du système.

c. Pour garantir que les futures améliorations de la navigation arrière du système sont correctement prises en charge, votre application doit désinscrire OnBackInvokedCallback. Sinon, les utilisateurs risquent de constater un comportement indésirable lors de l'utilisation de la navigation arrière du système, par exemple rester "bloqué" entre les vues et forcer la fermeture de l'application.

d. Après avoir migré avec succès l'application, utilisez le geste de retour prédictif comme décrit dans (16,B).

3. Icônes d'application thématiques

Méthode correspondante :

Ajoutez l'attribut monochrome android:drawable à l'élément <adaptive-icon>.

Par exemple, dans res/mipmap-anydpi-v26/ic_launcher.xml :

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

Dans le fichier manifeste, utilisez android:icon pour définir l'icône :

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

Remarque : Si votre manifeste contient à la fois Android:roundIcon et Android:icon, vous devez supprimer la référence à Android:roundIcon ou fournir une icône d'une seule couleur dans un dessin défini par l'attribut Android:roundIcon.

4、Placement des paramètres rapidesAPI

Les paramètres rapides dans la barre de notification permettent aux utilisateurs de modifier facilement les paramètres ou d'effectuer des actions rapides sans quitter le contexte de l'application.

TileService fournit aux utilisateurs une vignette qui peut être ajoutée aux paramètres rapides.

TileService sera détecté par les tuiles correspondant à .ACTION_QS_TILE et nécessitant l'autorisation "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. Fournir un meilleur support aux utilisateurs multilingues

(1) Paramètres système : permet aux utilisateurs de sélectionner la langue préférée pour chaque application en un seul endroit

①Créez un fichier nommé res/xml/locales_config.xml et précisez la langue de votre application

<?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>

②Dans le manifeste, ajoutez une ligne de code pointant vers ce nouveau fichier :

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

Définir via :

①Accès via les paramètres système

Paramètres > Système > Langue et saisie > Langues de l'application > (Sélectionnez une application)

②Accès via les paramètres de l'application

Paramètres > Applications > (sélectionnez une application) > Langue

(2) Amélioration du retour à la ligne de texte japonais

TextView peut envelopper du texte selon Bunsetsu (la plus petite unité de morphème naturel) ou des phrases au lieu de caractères, rendant l'interface des applications japonaises plus belle et plus facile à lire.

Ajoutez l' attribut android:lineBreakWordStyle="phrase" au contrôle TextView

(3) Amélioration de la hauteur de ligne des lettres non latines

La nouvelle hauteur de ligne empêche les caractères d'être tronqués et améliore le placement des caractères.

(4), API de conversion de texte (liée à l'IME)

①Saisissez Hiragana comme prononciation de votre terme de recherche (comme un nom de lieu ou d'application)

②Convertissez les caractères Hiragana en Kanji à l'aide du clavier

③Recherchez à nouveau en utilisant les caractères Kanji japonais

④Obtenez enfin les résultats de la recherche

Grâce à la nouvelle API de conversion de texte, les utilisateurs japonais peuvent saisir des hiragana et voir immédiatement les résultats de recherche de kanji en direct sans passer par les étapes 2 et 3.

(5), mise à jour de la bibliothèque Unicode

Deux changements notables :

①L'anglais (Canada) en‑CA et l'anglais (Philippines) en‑PH utilisent tous deux la ressource de traduction en anglais (États-Unis) au lieu de la ressource de traduction en anglais (Royaume-Uni) en‑GB lorsqu'aucune ressource de traduction n'est disponible.

②La catégorie plurielle many est introduite pour l'espagnol es, l'italien it, le portugais pt et le portugais (Portugal) pt‑PT. Semblable au français introduit dans CLDR v38 , cette catégorie convient aux grands nombres.

6. Polices vectorielles colorées

Android 13 prend en charge le rendu des polices COLR version 1 (COLRv1) et met à jour les emojis du système au format COLRv1.

COLRv1 est un nouveau format de police très compact qui s'affiche rapidement et clairement quelle que soit la taille.

Pour la plupart des applications, le système gère tout le travail et COLRv1 fonctionne correctement.

Toutefois, si votre application utilise des polices système pour son propre rendu de texte, il est recommandé de tester le rendu des emoji.

7. Césez plus rapidement

La césure facilite la lecture des lignes de texte séparées et contribue à rendre l'interface plus réactive.

Pour activer une césure plus rapide, utilisez la nouvelle fréquence fullFast ou normalFast dans setHyphenationFrequency() .

8. Audio Bluetooth LE

L'audio Low Energy (LE) est une nouvelle génération d'audio sans fil conçue pour remplacer le Bluetooth traditionnel et permettre de nouveaux cas d'utilisation et topologies de connexion.

La technologie permet aux utilisateurs de partager et de lire du contenu audio avec leurs amis et leur famille, ainsi que de s'abonner à du contenu diffusé publiquement à des fins d'information, de divertissement ou d'accessibilité.

Cette nouvelle technologie garantit aux utilisateurs de recevoir un son haute fidélité sans avoir à sacrifier la durée de vie de la batterie, et peut également basculer de manière transparente entre différents cas d'utilisation, ce qui n'est pas possible avec la technologie Bluetooth traditionnelle.

9、MIDI 2.0

Prise en charge de la nouvelle norme MIDI 2.0, y compris la possibilité de connecter du matériel MIDI 2.0 via USB.

Cette nouvelle version de la norme présente de nombreux avantages, tels qu'une précision améliorée du contrôleur, une prise en charge améliorée des intonations non occidentales et une expressivité améliorée lors de l'utilisation de contrôleurs à note unique.


2. Confidentialité et sécurité

1. Exportez les récepteurs enregistrés dans le contexte de manière plus sûre

Méthode d'identification :

Le récepteur de diffusion est enregistré dynamiquement dans le code

Méthode correspondante :

Dans chaque récepteur de diffusion de votre application, indiquez explicitement si d'autres applications peuvent lui envoyer des diffusions :

// 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);

Ce n'est qu'en passant le paramètre RECEIVER_EXPORTED que vous pourrez recevoir des diffusions d'autres applications.

Si vous utilisez le paramètre RECEIVER_NOT_EXPORTED, même si d'autres applications envoient des diffusions dirigées, elles ne seront pas reçues.

Si vous exportez un récepteur de diffusion, d'autres applications pourront envoyer des diffusions non protégées à votre application.

Remarque : Si le changement de structure de compatibilité DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED est activé, RECEIVER_EXPORTED ou RECEIVER_NOT_EXPORTED doit être spécifié pour chaque récepteur de diffusion.

Sinon, le système lancera une SecurityException lorsque vous tenterez d'enregistrer un récepteur de diffusion.

2. Sélecteur de photos

Lorsqu'une application lance le sélecteur de photos, les utilisateurs peuvent choisir de partager des images et des vidéos spécifiques (telles qu'une photo de profil) avec l'application, plutôt que d'accorder à l'application l'autorisation d'afficher l'intégralité de la bibliothèque multimédia.

Les sélecteurs de photos offrent une meilleure confidentialité aux utilisateurs, car votre application n'a pas besoin de déclarer d'autorisations d'exécution. De plus, le sélecteur de photos fournit une interface standardisée intégrée pour les applications, créant ainsi une expérience utilisateur plus cohérente.

(1) Définir les restrictions de partage

// 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 spécifie le nombre maximum de photos qui doivent être affichées dans le sélecteur de photos

(2) Traitement des résultats du sélecteur de photos

Définissez le type MIME dans la méthode setType() pour filtrer par « uniquement les photos » ou « uniquement les vidéos »

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

3. Nouvelles autorisations d'exécution pour les appareils WiFi à proximité

Android 13 (API niveau 33) introduit une nouvelle autorisation d'exécution dans le groupe d'autorisations NEARBY_DEVICES pour les applications qui gèrent les connexions d'un appareil aux points d'accès Wi-Fi à proximité.

Ces applications doivent déclarer la nouvelle autorisation NEARBY_WIFI_DEVICES lors de l'appel de plusieurs API Wi-Fi différentes .

Tant que l’application ne déduit pas la localisation physique via l’API Wi-Fi, il n’est pas nécessaire de la déclarer lorsqu’on cible Android 13 ou supérieur.

déclarer dans le manifeste

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

4. Nouvelles autorisations pour utiliser des réveils précis

Si votre application cible Android 13, vous pouvez utiliser l'autorisation USE_EXACT_ALARM qui est automatiquement accordée à l'application (non ouverte aux utilisateurs)

Cependant, au moins une des conditions suivantes doit être remplie :

① Il s'agit d'une application de réveil ou d'une application de minuterie.

② est une application de calendrier qui affiche les notifications des événements à venir.

Si votre application définit une alarme de précision qui ne remplit aucune des conditions indiquées dans la liste précédente,

Au lieu de cela, continuez à déclarer l'autorisation SCHEDULE_EXACT_ALARM et préparez-vous à la situation dans laquelle l'utilisateur refuse l'accès à votre application.

5. Les développeurs peuvent rétrograder les autorisations

À partir d'Android 13, les applications peuvent révoquer les autorisations d'exécution précédemment accordées par le système ou l'utilisateur. Cette API permet à votre application d'effectuer les tâches améliorant la confidentialité comme suit :

Révoquer les autorisations inutilisées.

Suivez les meilleures pratiques en matière d'autorisations pour accroître la confiance des utilisateurs. Vous souhaiterez peut-être envisager d'afficher une boîte de dialogue à l'utilisateur qui affiche les autorisations que vous révoquez activement.

Méthode correspondante :

Pour révoquer une autorisation d'exécution spécifique, transmettez le nom de l'autorisation dans revokeSelfPermissionOnKill() . Pour révoquer un ensemble d'autorisations d'exécution en même temps, transmettez le nom de l'ensemble d'autorisations à revokeSelfPermissionsOnKill() . L'annulation se produit de manière asynchrone et met fin à tous les processus associés à l'UID de votre application.

Remarque : Pour que les paramètres système indiquent que votre application n'accédera pas aux données d'un groupe d'autorisations spécifique, vous devez révoquer toutes les autorisations de ce groupe d'autorisations. Dans ce cas, appeler revokeSelfPermissionsOnKill() peut être utile.

6. Schéma de signature APK v3.1

Plus précisément, le schéma de signature v3.1 permet aux applications de prendre en charge à la fois les signataires originaux et les signataires tournants dans un seul APK. De plus, la solution prend également en charge la fonction de positionnement de version du SDK, qui permettra une rotation pour cibler une version supérieure de la plateforme.

Le schéma de signature v3.1 utilise un nouvel ID de bloc qui n'est pas reconnu dans la version 12L ou antérieure. Par conséquent, la plateforme applique le comportement de signataire suivant :

Les appareils exécutant Android 13 utiliseront des signataires rotatifs dans le bloc v3.1.

Les appareils exécutant des versions antérieures d'Android ignorent le signataire rotatif et utilisent le signataire d'origine du bloc v3.0.

Les applications qui n’ont pas encore changé leurs clés de signature n’ont pas besoin d’effectuer d’action supplémentaire. Chaque fois que ces sélections d'applications sont alternées, le nouveau schéma de signature v3.1 sera appliqué par défaut.

7. Fonctions de rapport d'erreurs améliorées dans keystore et KeyMint

Keystore et KeyMint fournissent désormais des indicateurs d'erreur plus détaillés et plus précis pour les applications qui génèrent des clés. Nous avons ajouté une hiérarchie de classes d'exceptions sous java.security.ProviderException qui contient les exceptions spécifiques à Android, y compris les codes d'erreur Keystore/KeyMint , et indique si l'erreur peut être réessayée. Vous pouvez également modifier la méthode de génération de clé et son utilisation (signature, chiffrement) pour générer de nouvelles exceptions. L'amélioration du rapport d'erreurs ne se limite pas à la génération de clé ; elle devrait désormais vous fournir ce dont vous avez besoin pour réessayer la génération de clé.

3. Prise en charge des tablettes et des appareils grand écran

Android 13 s'appuie sur les optimisations des tablettes introduites dans les mises à jour des fonctionnalités d'Android 12 et d'Android 12L

- Inclut des optimisations de l'interface système, de meilleures capacités multitâches et un mode de compatibilité amélioré. Sous test

Pendant les tests, assurez-vous que votre application s'affiche de manière optimale sur les tablettes et autres appareils à grand écran.

4. Graphiques

1. Shaders programmables

Android 13 ajoute la prise en charge des objets RuntimeShader programmables dont le comportement consiste à utiliser des graphiques Android

Langage d'ombrage graphique (AGSL). AGSL partage l'essentiel de sa syntaxe avec GLSL, mais peut être utilisé sur Android

Le moteur de rendu est utilisé pour personnaliser le comportement de dessin dans le canevas Android et filtrer le contenu de la vue. Android inclus

Utilisez ces shaders pour obtenir des effets d'entraînement , un flou et un défilement étiré , et Android 13 vous permet

Créez des effets avancés similaires pour votre application.

5. Médias

1. Routage audio attendu

Pour aider les applications multimédias à déterminer comment leur audio doit être acheminé, nous avons ajouté une nouvelle API de routage audio à la classe AudioManager .

La nouvelle API getAudioDevicesForAttributes() permet de récupérer une liste de périphériques pouvant être utilisés pour lire l'audio spécifié,

Ajout de getDirectProfilesForAttributes() pour vous aider à comprendre si un flux audio peut être lu directement.

Utilisez ces nouvelles API pour déterminer le meilleur format audio à utiliser pour vos pistes audio.

6. Fonctions d'accessibilité

1. Description vocale

Android 13 (API niveau 33) introduit une nouvelle préférence d'accessibilité à l'échelle du système qui permet aux utilisateurs d'activer les descriptions audio dans toutes les applications.

7. Fonctions principales

1. Mise à jour OpenJDK 11.

Android 13 commence à actualiser les bibliothèques principales d'Android pour être cohérent avec la version OpenJDK 11 LTS.

Il ajoute également des mises à jour de bibliothèques et la prise en charge du langage Java 11 pour les développeurs d'applications et de plates-formes. Introduit dans Android 13

Les modifications apportées à la bibliothèque principale peuvent également être mises à jour vers le module ART Mainline via le système Google Play pour Android.

12 Utilisation de l'équipement.

Android 13 inclut les modifications suivantes dans les bibliothèques principales :

  • Prend en charge l'utilisation  var de mots-clés pour les variables locales et comme paramètre lambdas.
  • Nouvelles méthodes dans la classe String :

    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • Prise en charge  Collection.toArray(IntFunction)pour faciliter l'adaptation des collections aux tableaux.

  • Prise en charge  , ,  et   dans  java.util les classes  , ,  et  .OptionalOptionalDoubleOptionalIntOptionalLongifPresentOrElse()isEmpty()orElseThrow()stream()

  • Prise en charge étendue  SocketOptions pour inclure la réutilisation des sockets.

  • NullReader, NullWriter, InputStream, OutputStream et  transferTo()Reader les fonctions sont utilisées pour transférer les caractères lus vers  Writer.

  • Ajout  Charsets de la possibilité d'utiliser le codage et le décodage d'URL.

  •  Fonctions  disponibles pour  FileReader, FileWriter, PrintStream et   .PrintWriterCharset

  •  De nouvelles fonctions  , et  ont été  ajoutées  pour  ByteArrayInput ou  OutputStream et  Input ou  .OutputStreamtransferTo()readNBytes()readAllBytes()writeBytes()

  • Prise en charge correcte  java.lang.invoke.VarHandle du runtime et du compilateur.

  • L'utilisation interne  VarHandle sera  java.util.concurrent mise à jour vers l'API OpenJDK 11.

Je suppose que tu aimes

Origine blog.csdn.net/m0_50408097/article/details/126143549
conseillé
Classement