2012-05-21 11 views

Antwort

20

Kontrolle dieses stack overflow answer .In, die Sie beantworten einen Toast, die verschiedenen Anruf states.Instead diesen Toast sehen können einen benutzerdefinierten Toast machen und Ihre Updates über den benutzerdefinierten Toast zeigen.

wenn Sie eine Aktivität statt Toast zeigen wollen versuchen, diesen Code in Ihre 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; 
      } 
     }  
    } 

diese Touchscreen-Aufruf auf dem Standard für die Aktivierung auf Ihre Aktivität hinzufügen.

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

diese Funktion Touch auf beiden Anruferabfangliste geben und 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"); 
} 

diese Berechtigung in Manifest-Datei

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

i it.i jede Lösung Touch finden können nicht versucht hinzufügen für acivating auf beiden activity.if jeder Verweis, den Sie erhalten lassen Sie mich wissen ..... –

+0

Ich versuchte es ... es funktioniert gut.Erste Berührung auf beide aufrufenden Bildschirm und Popup ... Ich fügte die Funktion in Antwort ... addieren diese Funktion in dein customphonestatelistner (unter klingeln) .danke für ur code und forschung ... :) –

+0

ich habe eine addInvitePopup-funktion in der antwort.just hinzufügen diese funktion in customphonestatelistner klasse und rufen sie wie 'case TelephonyManager.CALL_STATE_RINGING: addInvitePopup ("hai", c) von diesem Fall in customphonestatelistner (ich fügte hinzu, dass auch in der Antwort) –