В этом репозитории я нашел только способ удержания вызова: CustomPhoneDialer .См. InCallService, о методе onCallAdded (Override), создайте новый OngoingCall.
onCallAdded(Call call){
....
new OngoingCall().setCall(call)
....
}
В классе OngoingCall вам необходимо создать методы, которые вы собираетесь использовать в своей деятельности, такие как ответ, отклонение и т. Д. И один из вас должен удерживать / отменять:
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();
}
....
}
А в своей деятельности, в слушателе кнопки используйте эти методы:
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();
}
}