2012-02-06 30 views
5

Nerede sorun olduğunu bilmiyorum. Dinleyici, onRinging etkinliğini yakalamıyor (bu yüzden gelen çağrıları kabul edip reddedeceğime karar verebilirim). I bittikten sonraGelen çağrılarda zil sesi yok

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

I (CallEnd olay ve onChanged alma:

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

BroadcastReceiver sınıf şudur: ana faaliyet onCreate içinde

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

şudur: manifest bu çağrı) ama onRinging olayını almam. Bir sorun ne olabilir? Thnx

DÜZENLEME: ben hepsini değiştirdi.

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

ve ben BroadcastReceiver bu (kalın biri) gibi sınıf miras değişti: Böyle alıcıya (kalın) yeni amaç filtresini koymak

@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);** 
... 

Şimdi ben hala orada sadece IDLE devlet olsun ama zil sesi yok.

+0

Yardımcı olan yok mu? Kodda nerede yanlış olduğumu bilen var mı? – user1182625

cevap

5

SipAudioCall sınıfının kaynak kodunda bir hata var.

Bu soruna geçici bir çözüm için:

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

Bunun için bir referansınız var mı? – tristan2468

+0

Cevabınızı düzenledim ve 'setListener 'parametresinin' callbackImmediately' parametresini true olarak ayarladım, bu da dinleyici yönteminin çağrılmasını sağlar. –

+0

Bu harika bir çözüm! – vinitius

4

Kabul veya yudum demo gelen aramayı reddetmek için aynı senaryoyu hayata geçirdik. İki düğmeyle kendi Etkinliğinizi (IncomingGui.java) oluşturun Kabul Et ve Reddet. BroadcastReciever sınıfında, gelen çağrı etkinliğinizde Aktivitenizi (IncomingGui.java) arayın.

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

sonra
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()); 
    } 

sonra IncomingGui.java olarak "kabul etme" ve Düğmeler "Ret" arkasında yöntemler takip tanımlamak BroadcastReciever sınıfı aşağıdaki yöntemleri tanımlar. Şimdi gelen aramada, aramayı kabul etmek veya reddetmek için kendi gelen arama etkinliğiniz olacaktır.

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

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

} 
+0

Tam olarak neye ihtiyacım vardı! –

+0

Her iki tarafta da başarılı bir şekilde ses aldınız mı? Benim durumumda sadece bir tarafta ses alıyorum. Herhangi bir suçlama! –

+0

@JahangirKabir evet 2013'te – Zain

İlgili konular