Android SIP API – 如何接听已接来电

Android SIP API – 如何接听已接来电,第1张

概述使用SIP API时,如何接听我正在接收的电话.我使用sipdemo中的incomingcallreceiver类进行测试,我在WalkieTalkieActivity类中添加了一个拾取按钮,当呼叫进入时我应该启用但我无法弄清楚如何接听入站呼叫.任何帮助或示例将不胜感激. 更具体地说,这是来自IncomingCallReceiver类的示例代码: public class IncomingCall 使用SIP API时,如何接听我正在接收的电话.我使用sipdemo中的incomingcallreceiver类进行测试,我在WalkIETalkIEActivity类中添加了一个拾取按钮,当呼叫进入时我应该启用但我无法弄清楚如何接听入站呼叫.任何帮助或示例将不胜感激.

更具体地说,这是来自Incomingcallreceiver类的示例代码:

public class Incomingcallreceiver extends broadcastReceiver {@OverrIDepublic voID onReceive(Context context,Intent intent) {SipAudioCall incomingCall = null;try {SipAudioCall.Listener Listener = new SipAudioCall.Listener() {@OverrIDepublic voID onRinging(SipAudioCall call,SipProfile caller) {try {call.answerCall(30);}catch (Exception e) {e.printstacktrace();}}};WalkIETalkIEActivity wtActivity = (WalkIETalkIEActivity) context;incomingCall = wtActivity.manager.takeAudioCall(intent,Listener);incomingCall.answerCall(30);incomingCall.startAudio();incomingCall.setSpeakerMode(true);if(incomingCall.isMuted()) {incomingCall.toggleMute();}wtActivity.call = incomingCall;wtActivity.updateStatus(incomingCall);}catch (Exception e) {if (incomingCall != null) {incomingCall.close();}}}}

WalkIETalkIEActivity类使用以下方法接收呼叫:
在onCreate内

IntentFilter filter = new IntentFilter();filter.addAction("androID.SipDemo.INCOMING_CALL");callreceiver = new Incomingcallreceiver();this.registerReceiver(callreceiver,filter);

以及创建配置文件的位置

Intent i = new Intent();i.setAction("androID.SipDemo.INCOMING_CALL");PendingIntent pi = PendingIntent.getbroadcast(this,i,Intent.FILL_IN_DATA);manager.open(me,pi,null);

根据开发人员SIP guide:

当SIP服务收到新呼叫时,它会发出一个具有应用程序提供的动作字符串的意图.在SipDemo中,此 *** 作字符串是androID.SipDemo.INCOMING_CALL.

此代码摘录自SipDemo,显示了如何使用基于 *** 作字符串androID.SipDemo.INCOMING_CALL的待定意图创建SipProfile对象.当SipProfile接收到一个调用时,PendingIntent对象将执行广播:
(这是指上面创建配置文件的代码)
然后指南继续说:
广播将被意图过滤器截获,然后将触发接收器(Incomingcallreceiver).您可以在应用程序的清单文件中指定intent过滤器,或者在代码中执行,如在应用程序的Activity的SipDemo示例应用程序的onCreate()方法中:

我希望将一个拾取按钮添加到在铃声上启用的WalkIETalkIEActivity类,并在点击时接听来电.

我已成功处理所有其他一般通话问题,如保持,静音,扬声器,拨打电话和结束通话,但我无法弄清楚这一点.

编辑 – 这可行吗?:

public class Incomingcallreceiver extends broadcastReceiver {@OverrIDepublic voID onReceive(Context context,SipProfile caller) {try {call.answerCall(30);}catch (Exception e) {e.printstacktrace();}}};WalkIETalkIEActivity wtActivity = (WalkIETalkIEActivity) context;wtActivity.inbound = incomingCall;wtActivity.updateStatus(incomingCall);}catch (Exception e) {if (incomingCall != null) {incomingCall.close();}}}}

然后在walkIEtalkIEactivity Class中设置一个新的SipAudioCall,并在其中使用onclickListener进行onRinging的监听,然后进行正常的调用处理,如:

inbound.answerCall(30);inbound.startAudio();inbound.setSpeakerMode(true);if(inbound.isMuted()) {inbound.toggleMute();}

– 谢谢
丹尼尔

解决方法 经过几次不同的尝试,我能够让它工作.我无法处理传入呼叫活动之外的任何呼叫对象.我必须在我的主ui类中从我的按钮调用来电活动中的方法.引用Incomingcallreceiver.incomingCall.answercall会将状态更改为应答但不会失败并且实际上没有回答,即使未建立呼叫,startaudio也会发送RTP.我尝试将其移动到监听器中以进行oncallestablished,但它没有发生,所以它没关系.我仍然很新,所以如果我的术语关闭,我道歉.

谢谢,丹尼尔

总结

以上是内存溢出为你收集整理的Android SIP API – 如何接听已接来电全部内容,希望文章能够帮你解决Android SIP API – 如何接听已接来电所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1127099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存