【问题标题】:Default phone call - How to select a number service during a call?默认电话 - 如何在通话过程中选择号码服务?
【发布时间】:2020-05-26 05:01:23
【问题描述】:

我正在拨打默认电话。在我打电话给总机接线员之前,一切都很好。

在这种通话中,电话说:“按1做A,按2做B”。

我做了几个小时的研究,但找不到... 我确实尝试过这段代码,但它不起作用。

 keyPressed(KeyEvent.KEYCODE_1); // when press key 1

 private void keyPressed(int keyCode) {
    ....
    Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel://" + keyCode));
    startActivity(I);
    ....
    playTone(ToneGenerator.TONE_DTMF_1, TONE_LENGTH_INFINITE);
 }

非常感谢您的任何建议!

添加了 1: 我正在使用这样的 InCallService:

 class CallService : InCallService() {
 private var isShowEnded = true

override fun onCallAdded(call: Call) {
    super.onCallAdded(call)
    OngoingCall().setCall(call)
    CallActivity.getInstance().start(this, call)
    isShowEnded = false
}

override fun onCallRemoved(call: Call) {
    super.onCallRemoved(call)
    OngoingCall().setCall(null)
}
 }

和 OngoingCall:

public class OngoingCall {

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

public Call getsCall() {
    return sCall;
}

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

@RequiresApi(api = Build.VERSION_CODES.M)
public final void setCall(@Nullable Call value) {
    if (sCall != null) {
        sCall.unregisterCallback((Call.Callback) callback);
    }

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

    sCall = value;
}

@RequiresApi(api = Build.VERSION_CODES.M)
public void answer() {
    if (sCall != null) {
        assert sCall != null;
        sCall.answer(VideoProfile.STATE_AUDIO_ONLY);
    }
}

@RequiresApi(api = Build.VERSION_CODES.M)
public void hold(boolean hold) {
    if (sCall != null) {
        if (hold) sCall.hold();
        else sCall.unhold();
    }
}

@RequiresApi(api = Build.VERSION_CODES.M)
public void addCall(Call call) {
    if (sCall != null) {
        sCall.conference(call);
    }
}

@RequiresApi(api = Build.VERSION_CODES.M)
public void hangup() {
    if (sCall != null) {
        sCall.disconnect();
    }
}
}

然后我在按下键盘时尝试了这个:

      mTrueCallerOngoingCall.getsCall().playDtmfTone((char) tone); // inside playTone()

但它仍然无法正常工作:(

更新 2: 我已经修复了添加此方法:

private char getChar(int tone) {
    if (tone == 0) return '0';
    else if (tone == 1) return '1';
    else if (tone == 2) return '2';
    else if (tone == 3) return '3';
    else if (tone == 4) return '4';
    else if (tone == 5) return '5';
    else if (tone == 6) return '6';
    else if (tone == 7) return '7';
    else if (tone == 8) return '8';
    else if (tone == 9) return '9';
    else if (tone == 10) return '*';
    else return '#';
}

并从我上面的代码更改为

            mTrueCallerOngoingCall.getsCall().playDtmfTone(getChar(tone));
            mTrueCallerOngoingCall.getsCall().stopDtmfTone();

【问题讨论】:

    标签: android call default android-dialer


    【解决方案1】:

    是的。希望能帮到你。

    call.playDtmfTone(char);
    

    调用路径:

    android.telecom.Call;
    

    来自:任何类都扩展了 InCallService。

    In 方法:onCallAdded(call);

    【讨论】:

    • 这似乎是我需要的......但它没有用。我在帖子中添加了更多细节。如果我做错了什么,请告诉我。非常感谢
    • call.playDtmfTone(char)。然后调用 call.stopDtmfTone();为一个标签。音调事件结束
    • call.playDtmfTone('1'); call.stopDtmfTone();
    • try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { mTrueCallerOngoingCall.getsCall().playDtmfTone((char) 音调); mTrueCallerOngoingCall.getsCall().stopDtmfTone(); } else showToast("不支持此设备"); } catch (Exception e) { showToast("此设备不受支持!"); }
    • 我做了,但没有任何改变。
    猜你喜欢
    • 2018-06-24
    • 2017-03-05
    • 2021-10-23
    • 1970-01-01
    • 2011-10-25
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多