Проблема заключается в sip звонках в турецкой локали.
Если текущим языковым стандартом на устройстве является турецкий язык, любая регистрация sip для любого рабочего домена заканчивается ошибкой регистрации -4 (только для Xiaomi Mi MIX2, ошибка -5).
И, что самое интересное, в любой другой локали (протестировано на RU, PL, PT, FR, DE) sip работает нормально, без ошибок.
Эта проблема встречается на всех устройствах Android (в турецком языке), за исключением Samsung S8 и Samsung S9.
В качестве решения проблемы замена языкового стандарта в конфигурации была проверена для одного из рабочих языковых стандартов, но никаких изменений не произошло - регистрация заканчивается с указанной выше ошибкой.
В android.sip мы передаем наш контекст, соответственно возникла мысль посмотреть, что мы берем из конкурса и заменить его данными рабочей локали, но все, что глоток берет из
context это packageName, и во всех локалях это имя идентично и правильно.
Я использую официальную реализацию android.sip. Я скину только регистрационный код, т.к. при успешной регистрации звонки работают нормально:
private final SipRegistrationListener callIfReadyListener = new SipRegistrationListener () {
public void onRegistering (String localProfileUri) {
Log.d (TAG, "Registering with SIP Server ...");
}
public void onRegistrationDone (String localProfileUri, long expiryTime)
{
Log.d (TAG, "Ready");
if (! cancel)
handler.post (new Runnable () {
@Override
public void run () {
startCall ();
}
});
}
public void onRegistrationFailed (String localProfileUri, int errorCode,
String errorMessage) {
Log.d (TAG, "Registration failed. Please check settings.");
Log.d (TAG, "Registration failed with errorCode" \ n "errorMessage");
if (errorCode! = SipErrorCode.IN_PROGRESS) {
retryCall ();
}
}
};
SipProfile.Builder builder = new SipProfile.Builder (username, domain);
String displayName = repository.getPrefix () + "_Android_" + String.valueOf (repository.getUserId());
builder.setDisplayName(displayName);
builder.setPassword(password);
me = builder.build();
Intent i = new Intent();
i.setAction("android.SipDemo.INCOMING_CALL");
PendingIntent pi = PendingIntent.getBroadcast (context, 0, i, Intent.FILL_IN_DATA);
manager.open(me, pi, null);
manager.register(me, 30, callIfReadyListener);
Logs with an error:
I / PermissionHelper: PERMISSION: Permission Granted
D / SipPresenter: Initialize Profile
Android_displayname
Registering with SIP Server ...
Registration failed. Please check settings.
Registration failed with -4
registration timed out
retry calling
Initialize profile
Android_displayname
Registering with SIP Server ...
Registration failed. Please check settings.
Registration failed with -4
Work Logs:
PERMISSION: Permission Granted
D / SipPresenter: Initialize Profile
D / SipPresenter: Android_displayname
W / System.err: android.net.sip.SipException: SipService.createSession() returns null
W / System.err: at android.net.sip.SipManager.register(SipManager.java e13)
W / System.err: SipPresenter.initializeLocalProfile(SipPresenter.java:150)
W / System.err: SipPresenter.initializeManager SipPresenter.java:120)
W / System.err: SipPresenter $ 5.run (SipPresenter.java:214)
D / SipPresenter: retry calling
D / SipPresenter: Connection Error.
D / SipPresenter: Initialize Profile
D / SipPresenter: Android_displayname
D / SipPresenter: Registering with SIP Server ...
D / SipPresenter: Ready
D / SipPresenter: sip: name__token @ domain
D / SipPresenter: TR @ domain
D / SipPresenter: android.net.sip.SipAudioCall@3a08306
D / SipPresenter: call established
D / AudioGroup: stream [96] is configured as GSM 8kHz 20ms mode 0
D / AudioGroup: stream [114] is configured as RAW 8kHz 32ms mode 0
D / AudioGroup: stream [114] joins group [113]
D / AudioGroup: stream [96] joins group [113]
D / AudioGroup: group [113] switches from mode 0 to 2
D / AudioGroup: reported frame count: output 328, input 320
D / AudioGroup: adjusted frame count: output 512, input 512
D / AudioTrack: Client defaulted notificationFrames to 170 for frameCount 512
D / AudioGroup: latency: output 112, input 64
D / AudioGroup: stream [96] leaves group [113]
D / AudioGroup: stream [96] is dead
D / AudioTrack: stop() called with 16384 frames delivered
D / AudioGroup: stream [114] is dead
D / AudioGroup: group [113] is dead
Кроме того, вызовы были протестированы в другой библиотеке: org.pjsip.pjsua2, в турецкой локали все работало правильно. Есть предположения, что проблема плохо оптимизированной Android на разных устройствах
кроме Samsung, хотя библиотека берет из контекста только packageName, но в глубине использует функциональность android.os.
Я прошу помощи в этом вопросе, какие настройки или костыли для глотка могут быть введены для работы в турецкой локали. Заранее спасибо.