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é.
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
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
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