[JAVA] Afficher la vue au-dessus des autres applications sur Android (Résumé des méthodes de support par version d'API)

Lorsque j'écrivais du code Android pour la première fois depuis un certain temps, je suis tombé sur essayer de superposer la vue sur d'autres applications, alors j'ai pris une note. Comme seuls les principaux points sont extraits, veuillez vous référer au lien répertorié comme site de référence pour le code détaillé.

Android 4.0-5.0 (niveau d'API 14-22)

AndroidManifest.xml


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

Passez `` WindowManager.LayoutParams.TYPE_SYSTEM_ALERT``` au type de calque (variable `ʻint _type``` du constructeur) lors de la création de LayoutParams.

Site de référence: Toujours afficher les informations sur l'application à l'écran

Android 6.0-7.1.1 (niveau d'API 23-25)

En plus de prendre en charge jusqu'à Android 5.0, la prise en charge suivante est requise.

L'API a été mise à jour afin que certaines autorisations soient individuellement requises par l'utilisateur.

Tout d'abord, appelez `` Paramètres # canDrawOverlays '' pour vérifier les autorisations de l'application.

Si vous ne disposez pas de l'autorité, appelez l'écran pour modifier l'autorité de superposition. Pour l'intention, spécifiez `` Settings.ACTION_MANAGE_OVERLAY_PERMISSION '' et le nom du package de votre propre application. (Afficher à l'utilisateur et lui demander d'autoriser le réglage de l'autorisation au début de l'utilisation)

Lorsque le contrôle revient à votre application à partir de l'écran de réglage des autorisations, vérifiez à nouveau l'autorisation et, si l'autorisation est activée, ajoutez la vue de la même manière que jusqu'à Android 5.0.

Site de référence: La gestion des autorisations SYSTEM_ALERT_WINDOW a changé dans Marshmallow

Android 8.0 ~ (niveau d'API 26 ~)

Outre la prise en charge d'Android 7.1.1, la prise en charge suivante est requise.

L'API a été mise à jour et la couche TYPE_SYSTEM_ALERT n'est plus disponible. Par conséquent, l'utilisation du même type de couche `` WindowManager.LayoutParams.TYPE_SYSTEM_ALERT '' entraînera une erreur. (L'exception suivante se produit. J'avais du mal à trouver des informations même si je recherchais cette exception.)

java.lang.RuntimeException: Unable to start service com.example.app.TestService@57b8b88 with Intent { cmp=com.example.app/.TestService }: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@4938b2b -- permission denied for window type 2003



 Pour éviter cela, transmettez `` WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY '' au type de couche lors de la création de LayoutParams lorsque le niveau d'API est de 26 ou plus.

 Site de référence: [Le comportement de WindowManager change avec Android O](http://keithyokoma.hatenablog.com/entry/2017/03/22/190000)



Recommended Posts

Afficher la vue au-dessus des autres applications sur Android (Résumé des méthodes de support par version d'API)
Résumé des révisions (nouveaux problèmes de yuan) par version Java
[Android] Espionnons les applications des autres
Parcourir une instance de Tab's View sur Android
Afficher le texte caractère par caractère dans Surface View sur Android
Résumé du support Java 2018
À propos de la troncature de String par le nombre d'octets sur Android