2012-01-02 19 views
17

Quiero crear una ventana emergente personalizada en la pantalla de llamadas entrantes de Android donde deseo agregar información para el usuario. Quiero que la ventana emergente no deshabilite la capacidad de clics del fondo para que el usuario pueda responder la llamada.Ventana emergente sobre la pantalla de llamada entrante

Sé que es posible ya que muchas aplicaciones lo hacen, p. MeZeZe app: enter image description here

Algunos más información:

  1. Un tema translúcido no funcionó ya que cancela clickability de la actividad anterior.
  2. Un brindis no es una opción, no quiero que desaparezca.
  3. Sé que hay muchos hilos similares: leo muchos de ellos y ninguno responde mi problema específico.
  4. Ya sé cómo "hacer que algo suceda" una vez que una llamada es receptora, por lo que no hay necesidad de consejos de actividad INCOMING_CALL.

¡Agradecería cualquier ayuda! Gracias

+0

Puede por favor compartir cómo ha llegado este trabajo. Than you – png

+0

¿Puede compartir su solución para esto? Tal vez en github? ¡Gracias! – asheinfeld

+0

Compartiré mi solución cuando llegue al trabajo, no puedo desde casa. lo siento: D – Guy

Respuesta

11

Si desea mantener la actividad de llamadas todavía puede hacer clic, pero no tienen ningún control de su plantilla, que puede hacer esto llamando

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

En el método onCreate() de la actividad que es mostrado sobre la llamada.

Los parámetros de diseño utilizable junto con el presente son:

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

¡Gracias! trabajé con una pequeña adición. Se agregó a tu respuesta para que la respuesta esté completa. y el código en los comentarios es malo :) – Guy

+0

¿Hay alguna manera de que pueda tomar el control de la pantalla completa, así que tengo una pantalla entrante personalizada? – user1163234

+0

Hola, tengo un problema. Si recibo una llamada mientras estoy en mi aplicación (es decir, cualquiera de las vistas de una actividad en mi aplicación está en focu), esto no funciona correctamente. La pantalla de llamadas entrantes de android aparece y desaparece, con la ventana de actividad de mi aplicación mostrada y cualquier pantalla que sobreescriba, también está visible. Por favor, ayuda – png

0

Esto funcionó para mí con algunas adiciones:

En el BroadcastReceiver que añade las siguientes líneas a la intención:

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

Además, agregué un retraso de aproximadamente 1,5 segundos antes de disparar la actividad de PopupWindow para asegurarme de que venga después de la pantalla del sistema de llamadas entrantes.

En el archivo de manifiesto que ha añadido:

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

</activity> 

para asegurarse de que el diseño de la pantalla emergente es translúcido.

En el archivo de diseño xml Popupscreen I añadido los siguientes propperties:

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

Sin embargo esta solución todavía tiene un inconveniente:

aparece la pantalla emergente por encima de la pantalla del sistema de llamada entrante y, por tanto, un usuario tiene realizar una acción (como hacer clic en un botón, presionar una tecla o tocar la pantalla) para cerrar la pantalla emergente, ya que la pantalla de la llamada entrante permanece debajo y no se puede acceder hasta que se cierre la pantalla emergente.

0

No solo mostrará la actividad en la pantalla de bloqueo, sino que también permitirá recibir una llamada entrante detrás de la pantalla de actividad.

@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); 
Cuestiones relacionadas