2012-02-06 14 views
5

मुझे नहीं पता कि समस्या कहां है। श्रोता onRinging ईवेंट नहीं पकड़ता है (इसलिए मैं तय कर सकता हूं कि मैं आने वाली कॉल स्वीकार या अस्वीकार कर दूंगा)।इनकमिंग कॉल पर कोई रिंगिंग ईवेंट

public void onReceive(Context context, Intent intent) { 
SipAudioCall incomingCall = null; 
try { 
SipAudioCall.Listener listener = new SipAudioCall.Listener() { 
... 
@Override 
public void onCallEnded(SipAudioCall call) { 
// TODO Auto-generated method stub 
super.onCallEnded(call); 
} 
@Override 
public void onRinging(SipAudioCall call, SipProfile caller) { 
try { 
call.answerCall(30); 
call.startAudio(); 
call.setSpeakerMode(true); 
if(call.isMuted()) { 
call.toggleMute(); 
} 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
}; 
WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context; 
incomingCall = wtActivity.manager.takeAudioCall(intent, listener); 
wtActivity.call = incomingCall; 
... 

मैं CallEnd घटना और onChanged प्राप्त (मैं अंत के बाद:

BroadcastReceiver में
IntentFilter filter = new IntentFilter(); 
filter.addAction("android.SipDemo.INCOMING_CALL"); 
callReceiver = new IncomingCallReceiver(); 
this.registerReceiver(callReceiver, filter); 
... 
SipManager manager = SipManager.newInstance(this); 
Intent i = new Intent(); 
i.setAction("android.SipDemo.INCOMING_CALL"); 
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA); 
manager.open(me, pi, null); 

वर्ग यह है:

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

मुख्य गतिविधि onCreate में यह है: प्रकट में यह है कॉल करें) लेकिन मुझे onRinging ईवेंट प्राप्त नहीं होता है। क्या समस्या हो सकती है? Thnx

संपादित करें: मैं यह सब बदल दिया है। मैं इस तरह रिसीवर के लिए नए लक्ष्य फ़िल्टर डाल (बोल्ड):

<receiver android:name=".IncomingCallReceiver" android:label="Call Receiver"> 
    **<intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter>** 
</receiver> 

और मैं बदल BroadcastReceiver इस (बोल्ड एक) की तरह वर्ग के वारिस:

@Override 
public void onReceive(Context context, Intent intent) { 
    try { 
     **PhoneStateListener phoneListener=new PhoneStateListener() { 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
     // TODO Auto-generated method stub 
     Log.d("DEBUG", "Phone listener...."); 
     String stateString = "N/A"; 
     switch (state) { 
     case TelephonyManager.CALL_STATE_IDLE: 
     stateString = "Idle"; 
     break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
     stateString = "Off Hook"; 
     break; 
     case TelephonyManager.CALL_STATE_RINGING: 
     stateString = "Ringing"; 
     break; 
    } 
} 
};** 
WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context; 
SipSession ses=wtActivity.manager.getSessionFor(intent); 
**TelephonyManager telephony = (TelephonyManager) Context.getSystemService(Context.TELEPHONY_SERVICE); 
telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);** 
... 

अब मैं केवल निष्क्रिय अवस्था अभी भी वहाँ मिलता है लेकिन कोई रिंग नहीं है।

+0

कोई मदद करने के लिए कोई नहीं है? कोई भी जो जानता है कि मैं कोड में गलत कहां हूं? – user1182625

उत्तर

5

SipAudioCall क्लास के स्रोत कोड में कोई त्रुटि है।

इस समस्या के समाधान के लिए:

incomingCall = wtActivity.manager.takeAudioCall(intent, null); 
incomingCall.setListener(listener, true); 
+2

क्या आपके पास इसका कोई संदर्भ है? – tristan2468

+0

मैंने आपका उत्तर संपादित कर लिया है और 'setListener' के 'कॉलबैक तत्काल' पैरामीटर को सत्य पर सेट किया है, जो सुनिश्चित करता है कि श्रोता विधि को बुलाया जाता है। –

+0

यह एक अच्छा कामकाज है! – vinitius

4

मैं स्वीकार करता हूँ या घूंट डेमो में आने वाली कॉल को अस्वीकार करने का एक ही परिदृश्य को लागू किया है। दो बटनों के साथ अपनी खुद की गतिविधि (IncomingGui.java) बनाएं और स्वीकार करें। ब्रॉडकास्ट रिसीवर क्लास इनकमिंग कॉल इवेंट पर आपकी गतिविधि (IncomingGui.java) को कॉल करें।

 WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context; 
     incomingCall = wtActivity.manager.takeAudioCall(intent, listener); 
     showIncomingCallGui(intent, context); 
     wtActivity.call = incomingCall; 

फिर BroadcastReciever कक्षा में निम्न विधियों

public void showIncomingCallGui(Intent intent,Context context) { 

     Intent incomingCall=new Intent(context,IncomingCallGui.class); 
     context.startActivity(incomingCall); 
    } 

public static void answerIncomingCall(){ 

    try { 
      incomingCall.answerCall(30); 
      incomingCall.startAudio(); 
      incomingCall.setSpeakerMode(true); 

       if (incomingCall.isMuted()) { 
       incomingCall.toggleMute(); 

      } 
    } 

    catch(Exception e){ 

     System.out.println(e.toString()); 
    } 

} 

public static void rejectIncomingCall(){ 

    try { 
      if (incomingCall !=null) { 

       incomingCall.endCall(); 
       incomingCall.close(); 
      } 

    } 
      catch(Exception e){ 

     System.out.println(e.toString()); 
    } 

फिर IncomingGui.java में पीछे "स्वीकार" और बटन "अस्वीकार करें" तरीकों का पालन परिभाषित परिभाषित करते हैं। अब आने वाली कॉल पर आपको कॉल स्वीकार करने या अस्वीकार करने के लिए अपनी आने वाली कॉल गतिविधि होगी।

public void onCallAcceptButton(View view){ 
    IncomingCallReceiver.answerIncomingCall(); 
} 

    public void onCallRejectButton(View view){ 
    IncomingCallReceiver.rejectIncomingCall(); 
    this.finish(); 

} 
+0

बिल्कुल मुझे क्या चाहिए! –

+0

क्या आपने सफलतापूर्वक दोनों तरफ आवाज प्राप्त की? मेरे मामले में मुझे केवल एक तरफ आवाज मिल रही है। कोई सुझाव !!! –

+0

@JahangirKabir हाँ 2013 में – Zain

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