2011-03-31 32 views
25

में hangup घटना फोन मैं एक आवश्यकता है जिसमें मैं एंड्रॉयडआउटगोइंग कॉल का पता लगा रहा है और एंड्रॉयड

  1. जब भी आउटगोइंग कॉल किया जाता है में कॉल करने के लिए संबंधित घटनाओं के दो प्रकार का पता लगाने के लिए चाहते हैं, अपने आवेदन इस पता करने के लिए मिलना चाहिए कहा जाता संख्या
  2. जब कॉल (सफलता/असफलता के कारण) तक फांसी पर लटका दिया जाता है के साथ साथ, अपने आवेदन hangup

के कारण के साथ इस पता करने के लिए मिलना चाहिए इस Android में संभव है?

उत्तर

24

आप एक BroadcastReceiver बनाना चाहिए:

public class CallReciever extends BroadcastReceiver { 

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

     if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
       TelephonyManager.EXTRA_STATE_RINGING)) { 

       // Phone number 
       String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 

       // Ringing state 
       // This code will execute when the phone has an incoming call 
     } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
       TelephonyManager.EXTRA_STATE_IDLE) 
       || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
         TelephonyManager.EXTRA_STATE_OFFHOOK)) { 

      // This code will execute when the call is answered or disconnected 
     } 

    } 
} 

आपको आपको एक रजिस्टर करना चाहिए pplication प्रकट में इन उद्देश्यों को सुनने के लिए:

<receiver android:name=".CallReciever" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
</receiver> 
+0

नमूना कोड के लिए धन्यवाद आउटगोइंग कॉल को कैप्चर करने का कोई तरीका है, साथ ही आने वाली कॉल पर कब्जा कर लिया गया है? – user669231

+0

@ user669231 हां, आपको if-state में चेक बदलना चाहिए। आप इस विषय को देख सकते हैं: http://stackoverflow.com/questions/2668445/detect-outgoing-calls-and-problem-with-a-real-device – vendor

+1

एक आकर्षण की तरह काम करता है। इसके अतिरिक्त आपको manifest.xml फ़ाइल में निम्न अनुमति घोषित करनी है: <उपयोग-अनुमति एंड्रॉइड: name = "android.permission.READ_PHONE_STATE" /> अन्यथा यह काम नहीं करेगा। TelephonyManager वर्ग के एपीआई देखें: http://developer.android.com/reference/android/telephony/TelephonyManager.html – qupera

4

आप निम्न आशय कार्यों के लिए एक रिसीवर बनाने की जरूरत:

  1. आउटगोइंग कॉल - ACTION_NEW_OUTGOING_CALL
  2. कॉल hangup - ACTION_PHONE_STATE_CHANGED
+0

तुम मुझे उस के लिए एक उदाहरण दे सकते हैं, आउटगोइंग कॉल –

+0

के लिए मेरे जरूरत ऊपर वर्णित समाधान मेरे लिए पूरी तरह से काम किया है रिसीवर एक ही राज्य प्राप्त कर रहा है कई बार के लिए। हम इसे कैसे हल कर सकते हैं? क्या इरादे या कुछ अन्य तरीकों को प्राप्त करने की आईडी का पता लगाने के लिए वैसे भी है? –

8

केवल TelephonyManager और PhoneStateListener.You का उपयोग कर यहाँ तक कि एक BroadcastReceiver पंजीकरण कराना होगा नहींं एक सरल समाधान नहीं है।

public class MyPhoneStateListener extends PhoneStateListener { 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
      //Hangup 
      case TelephonyManager.CALL_STATE_IDLE: 
       break; 
      //Outgoing 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       break; 
      //Incoming 
      case TelephonyManager.CALL_STATE_RINGING: 
       break; 
     } 
    } 
} 

और यह रजिस्टर करने के लिए:

public static void registerListener(Context context) { 
    ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).listen(new MyPhoneStateListener(), 
      PhoneStateListener.LISTEN_CALL_STATE); 
} 
+0

यह आउटगोइंग कॉल के लिए काम नहीं कर रहा है। – ralphgabb

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