Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用android.telecom.InCallService实现呼叫合并、等待和呼叫会议_Android_Telephonymanager - Fatal编程技术网

如何使用android.telecom.InCallService实现呼叫合并、等待和呼叫会议

如何使用android.telecom.InCallService实现呼叫合并、等待和呼叫会议,android,telephonymanager,Android,Telephonymanager,我在我的一个项目中使用了android.telecom.InCallService。它出色地提供了所有电话状态,但一旦您实现了此服务,您需要创建自己的拨号器,它可以处理所有呼叫功能,即呼叫合并、会议、呼叫等待等 任何关于实施呼叫等待、合并和会议的链接或建议都会非常有帮助。我只在这个存储库中找到了如何保持呼叫: . 请参阅InCallService,在oncalled(Override)方法上,创建一个新的OngoingCall onCallAdded(Call call){ ..

我在我的一个项目中使用了
android.telecom.InCallService
。它出色地提供了所有电话状态,但一旦您实现了此服务,您需要创建自己的拨号器,它可以处理所有呼叫功能,即呼叫合并、会议、呼叫等待等


任何关于实施呼叫等待、合并和会议的链接或建议都会非常有帮助。

我只在这个存储库中找到了如何保持呼叫: . 请参阅InCallService,在oncalled(Override)方法上,创建一个新的OngoingCall

    onCallAdded(Call call){
    ....
    new OngoingCall().setCall(call)
    ....
    }
在OngoingCall类中,您需要创建在活动中使用的方法,如answer、reject等。。其中一人需要,按住/取消按住:

public class OngoingCall {

public static BehaviorSubject<Integer> state = BehaviorSubject.create();
private static Call call;

private Object callback = new Call.Callback() {
    @Override
    public void onStateChanged(Call call, int newState) {
        super.onStateChanged(call, newState);
        state.onNext(newState);
    }
};

public final void setCall(@Nullable Call value) {
    if (call != null) {
        call.unregisterCallback((Call.Callback)callback);
    }

    if (value != null) {
        value.registerCallback((Call.Callback)callback);
        state.onNext(value.getState());
    }
    call = value;
}

public void answer() {
    assert call != null;
    call.answer(VideoProfile.STATE_AUDIO_ONLY);
}

public void hangup() {
    assert call != null;
    call.disconnect();
}
public void hold(){
    assert call != null;
    call.hold();
}

public void unHold(){
    assert call != null;
    call.unhold();
}
....
}

非常感谢乔尔,我几乎解决了所有州的问题,包括会议。我将在测试后的几天内发布解决方案。谢谢你,如果你在这里发布解决方案,我会帮上忙,因为我无法合并通话或创建会议。我尝试了很多东西,我看过官方文档,但是没有成功。我很快会做的,Joel,它正在开发中,还没有完全准备好。你找到解决方案了吗?你在调查吗?嗨,乔尔,请把我加入skype kk。mca2009@gmail.com我会和你讨论的。
private OngoingCall ongoingCall;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_call);
    ButterKnife.bind(this);

    ongoingCall = new OngoingCall();
    disposables = new CompositeDisposable();

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

    number = Objects.requireNonNull(getIntent().getData()).getSchemeSpecificPart();
}

@OnClick(R.id.answer)
public void onAnswerClicked() {
    ongoingCall.answer();
}

@OnClick(R.id.hangup)
public void onHangupClicked() {
    ongoingCall.hangup();
}

@OnClick(R.id.hold)
public void onHoldClicked(){
    ongoingCall.hold();
}

@OnClick(R.id.unhold)
public void onUnHoldClicked(){
    ongoingCall.unHold();
}
}