Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
(180铃声)连接呼叫时无铃声android pjsip(pjsua2)_Android_Pjsip - Fatal编程技术网

(180铃声)连接呼叫时无铃声android pjsip(pjsua2)

(180铃声)连接呼叫时无铃声android pjsip(pjsua2),android,pjsip,Android,Pjsip,我已经使用PJSIP(PJSUA2)实现了一个VOIP项目 一切都很好,但我打电话给别人时没有听到铃声。但另一端,他正在接电话 在这里,我们无法判断该呼叫是否连接到另一个 请帮帮我。谢谢。自己生成音调。您可以使用android.media.ToneGenerator。大概是这样的: ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL, 100); toneGenerator.startTon

我已经使用PJSIP(PJSUA2)实现了一个VOIP项目

一切都很好,但我打电话给别人时没有听到铃声。但另一端,他正在接电话

在这里,我们无法判断该呼叫是否连接到另一个


请帮帮我。谢谢。

自己生成音调。您可以使用android.media.ToneGenerator。大概是这样的:

ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL, 100);
toneGenerator.startTone(ToneGenerator.TONE_CDMA_NETWORK_USA_RINGBACK, 1000);
编辑

您可以在notifyCallState中获取CallInfo

CallInfo ci = call.getInfo();
if (ci.getState() == pjsip_inv_state.PJSIP_INV_STATE_EARLY 
    && ci.getRole() == pjsip_role_e.PJSIP_ROLE_UAC 
    && ci.getLastReason().equals("Ringing")) {
     toneGeneratorHelper.startRingBack();
} else {
  toneGeneratorHelper.stopRingBack();
}

对于重复音调,您可以使用带有postDelayed的处理程序。为此创建助手类。

更好的方法是使用
pjsua2
库。我的意思是跳过Android API的

import org.pjsip.pjsua2.ToneDesc;
import org.pjsip.pjsua2.ToneDescVector;

private ToneDesc toneDesc;
private org.pjsip.pjsua2.ToneGenerator toneGenerator;
private ToneDescVector toneDescVector;

public class RINGBACK_TONES {
        public final static int kSPRingbackFrequency1 = 440,
                kSPRingbackFrequency2 = 480,
                kSPRingbackOnDuration = 1000,
                kSPRingbackOffDuration = 4000,
                kSPRingbackCount = 1,
                kSPRingbackInterval = 4000;
    }

protected synchronized void startRingbackTone() {

        toneDesc = new ToneDesc();
        toneGenerator = new org.pjsip.pjsua2.ToneGenerator();
        toneDescVector = new ToneDescVector();

        toneDesc.setFreq1((short) RINGBACK_TONES.kSPRingbackFrequency1);
        toneDesc.setFreq2((short) RINGBACK_TONES.kSPRingbackFrequency2);
        toneDesc.setOn_msec((short) RINGBACK_TONES.kSPRingbackOnDuration);
        toneDesc.setOff_msec((short) RINGBACK_TONES.kSPRingbackOffDuration);

        toneDescVector.add(toneDesc);

        try {
            toneGenerator.createToneGenerator();
            toneGenerator.play(toneDescVector, true);
            toneGenerator.startTransmit(Endpoint.audDevManager().getPlaybackDevMedia());

        } catch (Exception ex) { }
}

protected synchronized void stopRingbackTone() {

    try {
        if (toneGenerator != null)
            toneGenerator.stop();
        toneGenerator = null;

    } catch (Exception ex) { }

}

您可以使用媒体播放器在循环中播放自定义音调


在通信中将AudioManager模式设置为模式_

谢谢您的回复。是的,我用过。但是如何从CallInfo获得180。而且音调没有重复很多次(循环)。我昨天才做的。你的答案是正确的,并被接受。谢谢你,伙计。让我们成为朋友吧,你给了我很多次的回复。如果我们使用pjsua2,这是我们能做的最好的方法。无需使用android api