本文介紹了Android SipManager:android.net.sip.SipException:SipService.createSession()返回空的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
所以,我使用androids sip庫編寫這個android sip應用程序已經有一段時間了,但我無法進行注冊。目前,我調用SipManager.register()
時出現以下錯誤:android.net.sip.SipException: SipService.createSession() returns null
。
我的代碼:
public static void Register(final String username, final String password, final String domain, final String cbf)
throws ParseException, SipException {
Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register");
/*
* Luodaan SIP-profiili
*/
SipProfile.Builder builder = new SipProfile.Builder(username, domain);
builder.setPassword(password);
//builder.setProtocol("TCP");
//builder.setPort(5060);
builder.setAutoRegistration(false);
_sipprofile = builder.build();
Intent intent = new Intent();
intent.setAction("android.jahtipuhelin.INCOMING_CALL");
PendingIntent pendingIntent = PendingIntent.getBroadcast(_context, 0, intent, Intent.FILL_IN_DATA);
_sipmanager.open(_sipprofile, pendingIntent, new SipRegistrationListener() {
@Override
public void onRegistering(String s) {
Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register - testi 0");
}
@Override
public void onRegistrationDone(String s, long l) {
Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register - testi 1");
try {
_sipmanager.register(_sipprofile, 30, null);
_sipmanager.setRegistrationListener(_sipprofile.getUriString(), new JPSipRegistrationListener(_class, cbf));
} catch (SipException e) {
Log.e(MainActivity.LOGTAG,e.getClass().toString()+ ": "+ e.getMessage());
e.printStackTrace();
}
}
@Override
public void onRegistrationFailed(String s, int i, String s2) {
Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register - testi 2");
Log.d(MainActivity.LOGTAG, s2);
try {
_sipmanager.register(_sipprofile, 30, null);
_sipmanager.setRegistrationListener(_sipprofile.getUriString(), new JPSipRegistrationListener(_class, cbf));
} catch (SipException e) {
Log.e(MainActivity.LOGTAG,e.getClass().toString()+ ": "+ e.getMessage());
e.printStackTrace();
}
}
});//*/
Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register - 2");
}
private static class JPSipRegistrationListener implements SipRegistrationListener {
private MainActivity _parent;
private String _callBack;
public JPSipRegistrationListener(MainActivity ma, String callBack) {
this._parent = ma;
this._callBack = callBack;
}
@Override
public void onRegistering(String localProfileUri) {
Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.onRegistering");
_parent.callSub(_callBack, REGISTERING, 0, "");
}
@Override
public void onRegistrationDone(String localProfileUri, long expiryTime) {
Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.onRegistrationDone");
_parent.callSub(_callBack, REGISTRATION_DONE, 0, "");
}
@Override
public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage) {
Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.onRegistrationFailed");
Log.e(MainActivity.LOGTAG, "Virhe Sip-rekister?inniss?: "+errorCode+": "+errorMessage);
if (errorCode == -10) {
return;
}
_parent.callSub(_callBack, REGISTRATION_FAILED, errorCode, errorMessage);
}
}
運行該命令將產生以下輸出:
08-11 18:50:58.276 24449-24449/fi.hieta.aatu.android.jahtipuhelin D/fi.hieta.aatu.android.jahtipuhelin: testi: JahtipuhelinSipManager.Register
08-11 18:50:58.436 24449-24465/fi.hieta.aatu.android.jahtipuhelin D/fi.hieta.aatu.android.jahtipuhelin: testi: JahtipuhelinSipManager.Register - testi 2
08-11 18:50:58.436 24449-24465/fi.hieta.aatu.android.jahtipuhelin D/fi.hieta.aatu.android.jahtipuhelin: registration not running
08-11 18:50:58.446 24449-24449/fi.hieta.aatu.android.jahtipuhelin D/fi.hieta.aatu.android.jahtipuhelin: testi: JahtipuhelinSipManager.Register - 2
08-11 18:50:58.666 24449-24465/fi.hieta.aatu.android.jahtipuhelin E/fi.hieta.aatu.android.jahtipuhelin: class android.net.sip.SipException: SipService.createSession() returns null
有人知道我做錯了什么嗎?此外,我正在嘗試手動注冊sip配置文件,而不是使用自動注冊。(順便提一下我關于堆棧溢出的第一個問題,所以請輕一點:))
推薦答案
似乎至少有另一個異常導致相同的錯誤代碼。如果您的手機上碰巧有一個預定義的帳戶,并且具有相同的請求URI,那么您試圖在您的應用程序中創建的第二個帳戶就會以這種方式失敗。請注意,即使沒有為來電設置該帳戶(=后端中的SIP注冊),也會發生這種情況。
我希望Android團隊能夠修復這個錯誤,或者至少拋出一個有意義的錯誤。
這篇關于Android SipManager:android.net.sip.SipException:SipService.createSession()返回空的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,