2011-05-10 9 views
25

मैं जानना चाहता हूं कि मैं कॉल में हूं या नहीं।कैसे पता चलेगा कि मैं एंड्रॉइड पर कॉल कर रहा हूं या नहीं?

यदि मैं कॉल में हूं तो सेवा शुरू करें (सेवा हिस्सा स्पष्ट है)। मैं यह कैसे करु?

कॉल में भाग लेने के दौरान मुझे सेवा कॉल करने की आवश्यकता है ... मुझे इस बारे में कोई जानकारी नहीं है कि यह कैसे करें? कोई मदद?

+4

क्या आपका मतलब "फोन कॉल", "विधि कॉल" या कुछ अन्य कॉल में है? (मिलिंग कॉल? पर्दे कॉल? लॉरेन बाकॉल? :-)) –

+0

हाँ इसका फोन कॉल ... – Rockin

उत्तर

53

आप प्रसारण रिसीवर की आवश्यकता है ...

प्रकट घोषित प्रसारण रिसीवर में ...

<receiver android:name=".PhoneStateBroadcastReceiver"> 
     <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE"/>  
     </intent-filter> 
</receiver> 

भी उपयोग करता है-अनुमति की घोषणा ...

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

प्रसारण रिसीवर वर्ग। ..

package x.y; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE); 

    } 

} 

और एक वर्ग फ़ोन की स्थिति श्रोता अनुकूलित करने के लिए ...

package x.y; 
import android.content.Context; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class CustomPhoneStateListener extends PhoneStateListener { 

    //private static final String TAG = "PhoneStateChanged"; 
    Context context; //Context to make Toast if required 
    public CustomPhoneStateListener(Context context) { 
     super(); 
     this.context = context; 
    } 

    @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: 
      //when Ringing 
      Toast.makeText(context, "Phone state Ringing", Toast.LENGTH_LONG).show(); 
      break; 
     default: 
      break; 
     } 
    } 
} 
+2

मुझे इसे उत्तर के रूप में जांचने और चिह्नित करने के लिए ..anywayz धन्यवाद – Rockin

+0

आईएएम को यूडीएफ – Rockin

+0

नहीं मिल सकता है जब यह आवेदक और फोन प्राप्त होता है एक कॉल ... डीबग मोड में नियंत्रण पर नहीं आता है – Rockin

1

आप केवल पता करने के लिए कॉल आ रहा है आ सकता है, लेकिन आप इस संशोधित नहीं कर सकते। :( , इस अपनी आवश्यकताओं फिट बैठता है, तो

  • CALL_STATE_IDLE
  • CALL_STATE_OFFHOOK
  • CALL_STATE_RINGING

के इस why 2.3 version of android does not hava android.permission.MODIFY_PHONE_STATE ? and what is the solution for this?

26

TelephonyManager.getCallState() रिटर्न एक देख यह चितला टोहिया के बहुत से भी कम कोड और भी है व्यापक समाधान

+1

मुझे लगता है कि यह एक बेहतर समाधान है। पहले मामले में, प्रत्येक फोन स्थिति में एक नया श्रोता जोड़ा जाता है। – Goo

+0

+1 मुझे नहीं पता था कि विधि मौजूद है। लेकिन यह विधि केवल तभी मदद मिलेगी जब हम विशेष समय पर कॉल स्टेटस जानना चाहते हैं लेकिन यह हर समय फोन कॉल स्टेटस की निगरानी में मदद नहीं करेगा। –

+4

((टेलीफोनी प्रबंधक) getSystemService (Context.TELEPHONY_SERVICE))। GetballState() newbie के लिए –

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