J'ai un service qui affiche une vue flottante sur le gestionnaire de fenêtres (avec l'autorisation WINDOW_TYPE_ALERT). Je suis capable de l'afficher et d'effectuer des actions. Mais j'ai deux questions spécifiques:
La mise en oeuvre:
Dans le manifeste, j'ai ajouté des autorisations pour:
<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW" />
J'ai un récepteur de diffusion qui écoutera les événements d'alarme. À la réception de l'événement, je démarre un service pour afficher la vue flottante. Voici le code que j'utilise pour créer la vue.
LayoutParams layOutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
Chaque fois qu'un utilisateur exécute une action sur la vue, je supprime la vue du gestionnaire de fenêtres et supprime le service.
Ce que j'aimerais savoir, c’est: s’il s’agit de la bonne façon d’aborder le problème ou s’il existe de meilleures façons de le faire? Et dois-je apporter des modifications aux LayoutParams ou les conserver tels quels?
Deuxièmement, je voudrais également supprimer cette vue flottante lorsque le bouton SYSTEM BACK/HARDWARE BACK est enfoncé. Toute indication sur la façon de procéder serait utile.
Joindre une capture d'écran de la vue flottante pour une meilleure compréhension:
En ce qui concerne la détection du bouton Précédent - je l’ai fait fonctionner de la manière suivante (tout se passe dans le service onCreate code):
mView = new RelativeLayout(this) {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
// < your action >
return true;
}
return super.dispatchKeyEvent(event);
}
};
Jetez un coup d'œil à Standout Library, qui est bon pour la gestion des fenêtres flottantes. Il semble également que l'événement ne soit pas géré par le passé. Contacter le développeur peut aider.
Et une autre façon est d’essayer d’ouvrir une activité avec un fond/thème semi-transparent pour obtenir l’effet similaire utilisé dans une fenêtre flottante dans Any.do et l’événement backpress peut être géré
Concernant le bouton Précédent - Vous devez remplacer le "onBackPressed ()" dans votre vue et faire ce que vous voulez.
@Override
public boolean onBackPressed() {
// Remove your view from the window...
}
Quoi qu'il en soit, j'utilise un SDK appelé Tooleap , pour afficher les fenêtres flottantes de manière simple.
Voulez-vous que le bouton ACCUEIL supprime également votre interface utilisateur? Dans ce cas, il semble préférable d’organiser une activité ouverte sur un arrière-plan transparent plutôt que sur une fenêtre d’alerte. Pour ce faire, utilisez le style suivant comme thème de votre activité
<style name="Transparent">
<item name="Android:windowFrame">@null</item>
<item name="Android:windowBackground">@color/transparent</item>
<item name="Android:windowIsFloating">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
<item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="Android:windowFullscreen">true</item>
</style>