sip звонки с использованием библиотеки Android.Net.Sip
Я использую библиотеку Android.Net.Sip код пишу под Xamarin.Forms , мне нужно позвонить на другой телефон с помощью SIP , приведенный ниже код это осуществляет, но когда я поднимаю трубку, то звонок сам сбрасывается , а так же я не могу понять как передать голос по этому протоколу. На некоторых устройствах возникла проблема что manager = SipManager.NewInstance(this); возвращает null что приводит к завершению программы , многие пишут что это означает что Sip не поддерживается на моем устройстве, но если скачать приложение с playMarket для sip телефонии, то оно работает и звонит. Сервер Asterisk. Помогите пожалуйста разобраться в чем проблема.
Код программы:
SipProfile profile;
SipAudioCall.Listener listener = new SipAudioCall.Listener();
SipProfile.Builder builder = new SipProfile.Builder("1001", "192.168.0.105");
builder.SetAuthUserName("1001");
builder.SetPassword("1234");
builder.SetAutoRegistration(true);
builder.SetProfileName("1001");
builder.SetDisplayName("1001");
profile = builder.Build();
SipAudioCall call = new SipAudioCall(global::Android.App.Application.Context,profile);
call.StartAudio();
SipProfile perProfile;
SipProfile.Builder PerBuildere = new SipProfile.Builder("1002", "192.168.0.105");
perProfile = PerBuildere.Build();
SipManager manager = null;
if (manager == null)
manager = SipManager.NewInstance(this);
var intent = new Intent();
intent.SetAction("com.companyname.corporate_messenger.INCOMING_CALL");
var pendingIntent = PendingIntent.GetBroadcast(this, 0, intent,
(PendingIntentFlags)FillInFlags.Data);
manager.Open(profile, pendingIntent, null);
SipSession session = manager.GetSessionFor(intent);
manager.MakeAudioCall(profile, perProfile, listener, 120);
Манифест:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCOUNT_MANAGER" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.USE_SIP" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-feature android:name="android.hardware.sip.voip" android:required="true" />
<uses-feature android:name="android.software.sip.voip" android:required="true" />
<uses-feature android:name="android.hardware.wifi" android:required="true" />
<uses-feature android:name="android.hardware.microphone" android:required="true" />
Ответы (1 шт):
Android.net.sip это интерфейс встроенной звонилки андроида. Он используется ,например, для вызовов по вайфай в мобильной сети. Этого интерфейса может и не быть, если телефон не поддерживает вызовы в вайфай сети или подобное. Звонилки из маркета используют другие юзер агенты. Смотрите pjsip,sofia,liblinphone,jami и другие