2012-01-02 6 views
17

Je souhaite créer une fenêtre contextuelle personnalisée sur l'écran d'appel entrant de l'androïde où je souhaite ajouter des informations pour l'utilisateur. Je veux que le popup ne désactive pas la cliquabilité de l'arrière-plan pour que l'utilisateur puisse toujours répondre à l'appel.Fenêtre popup sur l'appel entrant

Je sais que c'est possible car de nombreuses applications le font, par ex. MeZeZe app: enter image description here

Quelques informations:

  1. Un thème translucide ne fonctionne pas car il annule la cliquabilité de l'ancienne activité.
  2. Un toast n'est pas une option - je ne veux pas qu'il disparaisse.
  3. Je sais qu'il y a beaucoup de threads similaires - j'en ai lu beaucoup et aucun ne répond à mon problème spécifique.
  4. Je sais déjà comment "faire bouger quelque chose" une fois qu'un appel est reçu, donc pas besoin de conseils d'activité INCOMING_CALL.

J'apprécierais toute aide! Merci

+0

Pouvez-vous s'il vous plaît partager comment vous avez obtenu ce travail. Que vous – png

+0

Pouvez-vous partager votre solution pour cela? Peut-être sur github? Merci! – asheinfeld

+0

Je vais partager ma solution quand je vais travailler, je ne peux pas partir de chez moi. désolé: D – Guy

Répondre

11

Si vous voulez garder l'activité d'appel encore cliquable, mais pas de contrôle sur votre superposition, vous pouvez le faire en appelant

getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

Dans la méthode onCreate() de l'activité qui est montré au cours de l'appel.

Les paramètres de mise en page utilisables en même temps que ce sont:

android:windowBackground="@android:color/transparent" 
android:windowIsTranslucent="true" 
android:windowAnimationStyle="@android:style/Animation.Translucent" 
+0

Merci! travaillé avec un petit ajout. Ajouté à votre réponse de sorte que la réponse sera complète. et le code dans les commentaires est mauvais :) – Guy

+0

Y a-t-il un moyen de prendre le contrôle de l'écran complet pour avoir un écran entrant personnalisé? – user1163234

+0

Bonjour, j'ai un problème. Si je reçois un appel alors que dans mon application (c'est-à-dire que la vue d'une activité de mon application est focu) cela ne fonctionne pas correctement. L'écran des appels entrants Android arrive et disparaît, avec la fenêtre d'activité de mon application affichée et quel que soit l'écran que je suis en train de faire, cela est également visible. S'il vous plaît aider – png

0

Cela a fonctionné pour moi avec quelques ajouts:

Dans le BroadcastReceiver j'ai ajouté les lignes à l'intention suivantes:

 i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

En outre, j'ai ajouté un délai d'environ 1,5 seconde avant que j'active l'activité de PopupWindow pour m'assurer qu'il arrive après l'écran du système d'appel entrant.

Dans le fichier Manifest I ajouté:

<activity android:name=".PopUpIncomingCallActivity" 
      android:theme="@android:style/Theme.Translucent"> 

</activity> 

pour vous assurer que la mise en page de l'écran Popup est translucide.

Dans le fichier xml de mise en page Popupscreen J'ai ajouté les propperties suivants:

android:windowAnimationStyle="@android:style/Animation.Translucent" 
    android:windowBackground="@android:color/transparent" 
    android:windowIsTranslucent="true" 

Cependant, cette solution présente encore un inconvénient:

L'écran contextuel apparaît au-dessus de l'écran du système d'appel entrant et donc un utilisateur pour effectuer une action (comme cliquer sur un bouton, appuyer sur une touche ou toucher l'écran) pour fermer l'écran contextuel, car l'écran d'appel entrant reste en dessous et n'est pas accessible tant que l'écran contextuel n'est pas fermé.

0

Il affichera non seulement l'activité sur l'écran de verrouillage mais permettra également de recevoir un appel entrant derrière votre écran d'activité.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    final Window win = getWindow(); 
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
      | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
      | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    win.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

    setContentView(R.layout.activity_main);