2012-05-21 12 views
15

मैं उस स्क्रीन में किसी कॉल के बीच में कुछ जानकारी दिखाना चाहता हूं जैसे मौसम की जानकारी, या फेसबुक अपडेट, क्या कोई मेरी मदद कर सकता है।कॉल के बीच में जानकारी दिखाएं

जो अपडेट मैं चाहता हूं उसके नीचे स्क्रीनशॉट देखें।

enter image description here

उत्तर

20

जांच इस stack overflow answer .इसके इसका उत्तर आपको लगता है कि टोस्ट के विभिन्न कॉल states.Instead दिखा एक टोस्ट देख सकते हैं एक कस्टम टोस्ट बनाने के लिए और है कि कस्टम टोस्ट के माध्यम से अपने अपडेट दिखाएं।

अगर आप

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

डिफ़ॉल्ट स्क्रीन बुला पर स्पर्श सक्रिय करने के लिए अपनी गतिविधि में जोड़ने के अपने CustomPhoneStateListener में इस कोड की कोशिश टोस्ट के बजाय एक गतिविधि दिखाना चाहते

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

इस समारोह दोनों फोन करने वाले स्क्रीन और पॉपअप पर स्पर्श दे देंगे

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

मैनिफ़ेस्ट फ़ाइल

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

मैं करने की कोशिश की था.मैं स्पर्श acivating के लिए किसी भी समाधान नहीं मिल सकता है में इस अनुमति जोड़ें दोनों गतिविधियों पर। अगर आपको कोई संदर्भ मिलता है तो मुझे बताएं ..... –

+0

मैंने कोशिश की ... यह ठीक काम करता है। कॉलिंग स्क्रीन और पॉपअप दोनों पर स्पर्श प्राप्त करना ... मैंने जवाब में फ़ंक्शन जोड़ा .. उस फ़ंक्शन को जोड़ें तुम्हारे अंदर customphonestatelistner (बजने के तहत)। यूआर कोड और शोध के लिए धन्यवाद ... :) –

+0

मैंने उत्तर में एक addInvitePopup फ़ंक्शन जोड़ा है। उस फ़ंक्शन को customphonestatelistner क्लास में जोड़ें और इसे 'केस TelephonyManager.CALL_STATE_RINGING: addInvitePopup ("है", सी);' उस मामले से customphonestatelistner (मैंने इसे उत्तर में भी जोड़ा) –

संबंधित मुद्दे