我已經使用PJSIP(PJSUA2)實現了VOIP項目。(180振鈴)連接呼叫時沒有鈴聲android pjsip(pjsua2)
一切都很好,但我打電話時沒有聽到響起的聲音。但是另一方面,他正在接聽電話。
在這裏,我們不能判斷該呼叫正在連接到其他人。
請幫幫我。謝謝。
我已經使用PJSIP(PJSUA2)實現了VOIP項目。(180振鈴)連接呼叫時沒有鈴聲android pjsip(pjsua2)
一切都很好,但我打電話時沒有聽到響起的聲音。但是另一方面,他正在接聽電話。
在這裏,我們不能判斷該呼叫正在連接到其他人。
請幫幫我。謝謝。
自己生成色調。你可以使用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) { }
}
謝謝你的答覆。是的,我用它。但是如何從CallInfo獲取180。並且音不重複(循環)。 –
我編輯了答案。 – manao
我昨天只做了。你的回答是正確的,並被接受。謝謝你的哥們。讓我們成爲朋友吧,你給了我很多次的回覆。 –