2012-05-21 5 views
15

Quiero mostrar algo de información en el medio de una llamada en esa pantalla como información meteorológica, o actualizaciones de Facebook como esa, ¿alguien puede ayudarme?Mostrar la información en el medio de la llamada

Vea la captura de pantalla a continuación de la actualización que deseo.

enter image description here

Respuesta

20

cheque esta stack overflow answer .En esa respuesta se puede ver una tostada que muestran diferentes states.Instead llamado de que las tostadas hacer un brindis a medida y mostrar sus actualizaciones a través de que las tostadas personalizado.

si desea mostrar una actividad en lugar de pan tostado probar este código en su CustomPhoneStateListener

public class CustomPhoneStateListener extends PhoneStateListener { 

     ActivityManager activityManager; 
     Intent i1; 
     public CustomPhoneStateListener(Context context) { 
      super(); 
      this.context = context; 
      i1 = new Intent(context, TelephoneyWithoutToastActivity.class); 
      i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     } 

     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
      super.onCallStateChanged(state, incomingNumber); 

      switch (state) { 
      case TelephonyManager.CALL_STATE_IDLE: 
       //when Idle i.e no call 
       Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show(); 

       break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 

       //when Off hook i.e in call 
       //Make intent and start your service here 
       Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show(); 

       break; 
      case TelephonyManager.CALL_STATE_RINGING: 

       ActivityManager localActivityManager = (ActivityManager) this.context.getSystemService("activity"); 
       for (String str = ((ActivityManager.RunningTaskInfo) localActivityManager.getRunningTasks(1).get(0)).topActivity.flattenToString();; str = ((ActivityManager.RunningTaskInfo) localActivityManager.getRunningTasks(1).get(0)).topActivity.flattenToString()) { 
        if ((!str.contains("com.android.phone.InCallScreen"))) 
         continue; 
        Log.d("IncomingCallPlus", "*****************************************************"); 
        context.startActivity(i1); 
        return; 
       }  

      default: 
       break; 
      } 
     }  
    } 

Agregar a su actividad para la activación táctil en la pantalla por defecto llamando.

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

esta función dará toque tanto en la pantalla de llamadas y emergente

public void addInvitePopup(final String number, Context c) { 

    //check if pref is ok with invite in call 
    // if(!Preferences.getInstance(c.getInviteInCall())){return ; } 
    // sets the WindowManager 

    WindowManager wm = (WindowManager) c.getSystemService(Context.WINDOW_SERVICE); 

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     LayoutParams.WRAP_CONTENT, 
     LayoutParams.WRAP_CONTENT, 
     WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | 
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
     WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
     PixelFormat.TRANSLUCENT); 
    params.x = 250; 
    params.height = LayoutParams.WRAP_CONTENT; 
    params.width = LayoutParams.WRAP_CONTENT; 
    params.format = PixelFormat.TRANSLUCENT; 
    final Context ct = c; 

    params.gravity = Gravity.TOP; 
    params.setTitle("Testing"); 

    LinearLayout ly = new LinearLayout(c); 
    ly.setOrientation(LinearLayout.VERTICAL); 

    Button inviteButton = new Button(c); 
    inviteButton.setClickable(true); 
    inviteButton.setBackgroundDrawable(c.getResources().getDrawable(R.drawable.ic_launcher)); 

    inviteButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(v.getContext(), "adding to blacklist..", Toast.LENGTH_LONG).show(); 
      v.setBackgroundDrawable(ct.getResources().getDrawable(R.drawable.images)); 
      v.setClickable(false); 
      // sendMessage(v, number); 

      //Track this event: 
      //MixPanelTracking.setPropKeyValue(getApplicationContext(), null, null, "Add friend - During Call"); 
     } 
    }); 

    inviteButton.setWidth(30); 
    inviteButton.setHeight(30); 
    // inviteButton.setLayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
    // WindowManager.LayoutParams.WRAP_CONTENT); 


    ly.addView(inviteButton); 

    wm.addView(ly, params); 
    // wm.addView(inviteButton, params); 
    Log.i("TTT", "after add view"); 
} 

agregar este permiso en el archivo de manifiesto

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

he intentado it.i No se encuentra ninguna solución para acivating táctil en ambas actividades. si hay alguna referencia que me dejen saber ... –

+0

lo probé ... funciona bien. Al tocar en la pantalla y en la ventana emergente ... agregué la función en respuesta ... agregué esa función en tu Contador de teléfonos personalizados (bajo el timbre). Gracias por su código e investigación ... :) –

+0

Agregué una función addInvitePopup en la respuesta. Simplemente agregue esa función en la clase deltelista de teléfonos personalizados y llámelo como 'caso TelephonyManager.CALL_STATE_RINGING: addInvitePopup ("hai", do);' a partir de ese caso en el fabricante de teléfonos personalizados (agregué eso también en respuesta) –

Cuestiones relacionadas