2010-05-20 13 views
5

मैंने क्लास टेलीफोनी मैनेजर में देखा है कि CALL_STATE_IDLE, CALL_STATE_OFFHOOK और CALL_STATE_RINGING हैं। वे आने वाली कॉल के लिए इस्तेमाल किया प्रतीत होता है।मैं एंड्रॉइड फोन में आउटगोइंग कॉल की स्थिति कैसे प्राप्त करूं?

मैं वास्तव में क्या करना चाहता हूं, जब आउटगोइंग कॉल किया जाता है, प्राप्त होता है, या समय समाप्त हो जाता है। उसको कैसे करे?

उत्तर

1

जो मैं समझता हूं उससे, आप यह पता लगा सकते हैं कि एक आउटगोइंग कॉल शुरू किया गया है क्योंकि फोन स्थिति निष्क्रिय से ऑफहुक में बदल जाती है। हालांकि, वहां से, उस कॉल की स्थिति को जानना- यानी यह जानना कि क्या कॉल आप रख रहे हैं, बज रहा है, वॉयस मेल में स्थानांतरित किया जा रहा है, वास्तव में उठाया गया है या बस समय समाप्त होता है जिसे हम पहचान नहीं सकते हैं।

अब मुझे यकीन नहीं है कि यह एसडीके में सिर्फ ज्ञानी नहीं है, लेकिन नेटवर्क पर संचारित है और संभवतः रेडियो रिसीवर से पता लगाने योग्य है, या यदि वह जानकारी केवल सादा प्रसारित नहीं हो रही है।

1

न्यूनतम है कि क्या करने की जरूरत है:

public class CallCounter extends PhoneStateListener { 

    public void onCallStateChanged(int state, String incomingNumber) { 
     switch(state) { 
      case TelephonyManager.CALL_STATE_IDLE: 
        Log.d("Tony","Outgoing Call finished"); 
        // Call Finished -> stop counter and store it. 
        callStop=new Date().getTime(); 
        context.stopService(new Intent(context,ListenerContainer.class)); 

       break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
        Log.d("Tony","Outgoing Call Starting"); 
        // Call Started -> start counter. 
        // This is not precise, because it starts when calling, 
        // we can correct it later reading from call log 
        callStart=new Date().getTime(); 
       break; 
     } 
    } 


public class ListenerContainer extends Service { 
    public class LocalBinder extends Binder { 
     ListenerContainer getService() { 
      return ListenerContainer.this; 
     } 
    } 
    @Override 
    public void onStart(Intent intent, int startId) { 
     TelephonyManager tManager =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
     CallCounter callCounter=new CallCounter(this); 
     tManager.listen(callCounter,PhoneStateListener.LISTEN_CALL_STATE); 
     Log.d("Tony","Call COUNTER Registered"); 
    } 
    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 
    // This is the object that receives interactions from clients. See 
    // RemoteService for a more complete example. 
    private final IBinder mBinder = new LocalBinder(); 

} 

public class myReceiver extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { 
      context.startService(new Intent(context,ListenerContainer.class)); 
     } 
     } 
} 
+0

कोड कैसे काम कर रहा है ....? –

+0

यह कभी काम नहीं करेगा। जब फ़ोन आउटगोइंग नंबर डायल करता है तो CALL_STATE_OFFHOOK तुरंत कॉल किया जाता है। – AndroidDev

1

अगर आप एक समय कॉल का पता लगा सकते हैं, लेकिन अंतर मैं जब कॉल प्रारंभ नहीं जानता कि संभव है। यदि अवधि> 0 तो फिर यह फोन का जवाब दिया गया था

Uri allCalls = Uri.parse("content://call_log/calls"); 
String lastMinute = String.valueOf(new Date().getTime() - DAY_IN_MILISECONDS); 
//before the call started 
Cursor c = app.getContentResolver().query(allCalls, null, Calls.DATE + " > " 
      + lastMinute, null, Calls.DATE + " desc"); 
c.moveToFirst(); 

if (c.getCount() > 0) { 
    int duration = Integer.parseInt(c.getString(c.getColumnIndex(Calls.DURATION))); 
} 

:

आप इस तरह यह कर सकते हैं, CALL_STATE_IDLE में।

स्पष्ट रूप से अन्य झंडे हैं जिन्हें आप यह निर्धारित करने के लिए उपयोग कर सकते हैं कि कॉल किए जाने के बाद CALL_STATE_IDLE को कॉल किया गया है।

आशा है कि आप जो भी करने की कोशिश कर रहे हैं उसके लिए आपको मदद करने में मदद मिलेगी।

+0

इस समाधान के साथ अपना समय बर्बाद मत करो। अवधि शून्य कभी नहीं होगी। इसमें प्रतीक्षा समय शामिल होगा जब तक कि व्यक्ति फोन उठाए। सत्यापित करने का सबसे आसान तरीका यह है कि केवल एक नंबर डायल करें, व्यक्ति को इसे लेने के लिए नहीं है और फिर बस फोन टाइमआउट दें या स्वयं को लटका दें। आप देखेंगे कि कॉल लॉग में अवधि शून्य नहीं होगी। – AndroidDev

+1

@AndroidDev वैसे मुझे लगता है कि यह फोन के मॉडल पर निर्भर करता है, क्योंकि मैंने कुछ फोनों में परीक्षण किया है और एक अनुत्तरित कॉल ने 0s अवधि लॉग दिया है। – htafoya

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