当使用SIP API时,我如何接听来电。我正在使用sipdemo中的incomingcallreceiver类进行测试,并在WalkieTalkieActivity类中添加了一个pickup按钮,当有电话呼入时应该启用该按钮,但我无法弄清楚如何接听呼入电话。任何帮助或示例都将不胜感激。
更具体地说,这是IncomingCallReceiver类的示例代码:
WalkieTalkieActivity类在onCreate方法中使用以下内容来接收电话:
根据开发人员SIP guide的说法:
当SIP服务接收到新呼叫时,它会使用应用程序提供的操作字符串发送一个意图。在SipDemo中,此操作字符串为android.SipDemo.INCOMING_CALL。
以下是来自SipDemo的代码摘录,显示了如何基于操作字符串android.SipDemo.INCOMING_CALL创建SipProfile对象以及挂起意图。当SipProfile接收到呼叫时,PendingIntent对象将执行广播: (这是上面创建配置文件的代码) 该指南随后继续说明: 广播将被意图过滤器拦截,然后触发接收器(IncomingCallReceiver)。您可以在应用程序的清单文件中指定意图过滤器,也可以像SipDemo示例应用程序的Activity的onCreate()方法中的代码一样执行它:
我想在WalkieTalkieActivity类中添加一个接听按钮,在响铃时启用,并在单击时回答来电。
我已成功处理所有其他通用呼叫问题,例如保持,静音,扬声器,拨打电话和结束通话,但我无法解决这个问题。
编辑-这可行吗?
更具体地说,这是IncomingCallReceiver类的示例代码:
public class IncomingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SipAudioCall incomingCall = null;
try {
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
@Override
public 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, 0, 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)。您可以在应用程序的清单文件中指定意图过滤器,也可以像SipDemo示例应用程序的Activity的onCreate()方法中的代码一样执行它:
我想在WalkieTalkieActivity类中添加一个接听按钮,在响铃时启用,并在单击时回答来电。
我已成功处理所有其他通用呼叫问题,例如保持,静音,扬声器,拨打电话和结束通话,但我无法解决这个问题。
编辑-这可行吗?
public class IncomingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SipAudioCall incomingCall = null;
try {
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
@Override
public void onRinging(SipAudioCall call, 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类中设置一个新的SipAudioCall以及一个onRinging监听器和其内部的onclicklistener,然后按照正常的呼叫处理方式进行处理:
inbound.answerCall(30);
inbound.startAudio();
inbound.setSpeakerMode(true);
if(inbound.isMuted()) {
inbound.toggleMute();
}
--谢谢 Daniel
answerCall
方法来接收来电。 - ρяσѕρєя K