2012-05-21 17 views
15

Chcę pokazać niektóre informacje w trakcie rozmowy na tym ekranie, takie jak informacje o pogodzie lub aktualizacje na Facebooku, czy ktoś może mi pomóc.Pokaż informacje w środku połączenia

Zobacz zrzut ekranu poniżej aktualizacji, którą chcę.

enter image description here

Odpowiedz

20

check to stack overflow answer .W że odpowiedź można zobaczyć toast pokazano różne połączenia states.Instead tego tosty zrobić niestandardową tosty i pokazać swoje aktualizacje za pośrednictwem tej niestandardowej toast.

jeśli chcesz pokazać aktywność zamiast tosty wypróbować ten kod w swoim 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; 
      } 
     }  
    } 

dodać do swojej działalności za aktywację dotyk na domyślny ekran dzwonisz.

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

ta funkcja daje dotyk zarówno na ekranie rozmówcy i popup

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"); 
} 

dodać to uprawnienie w pliku manifestu

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

Próbowałem it.i nie można znaleźć żadnego rozwiązania dla acivating dotyk na obu działania.if wszelkie odniesienia otrzymasz daj mi znać ..... –

+0

próbowałem go ... jego działa dobrze.Zawiera dotykać na ekranie połączenia i popup ... dodałem funkcję w odpowiedzi..add tej funkcji do twojego customphonestatelistner (pod dzwonkiem). podziękowania za kod i badania ... :) –

+0

Dodałem funkcję addInvitePopup w answer.just dodaj tę funkcję w klasie customphonestatelistner i nazwij ją tak: 'case TelephonyManager.CALL_STATE_RINGING: addInvitePopup ("hai", do);' od tego przypadku w customphonestatelistner (dodałem, że również w odpowiedzi) –