无法创建SipSession;网络不可用,只能重新启动帮助

Failed to create SipSession; network unavailable and only reboot helps(无法创建SipSession;网络不可用,只能重新启动帮助)
本文介绍了无法创建SipSession;网络不可用,只能重新启动帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个简单的应用程序,允许用户使用sip协议发起呼叫。 问题是在某些情况下无法创建SipSession(例如,删除具有活动的sip会话的应用程序,然后重新安装它)。

在这种情况下,我收到错误:

android.net.sip.SipException: Failed to create SipSession; network unavailable?

并且仅在物理设备重新启动后才起作用。

我的sip类:

public class SipDataManager {

private Context context;
private SipManager sipManager;
private SipProfile sipProfile;
private SipSession sipSession;
private UserProfile userProfile;

public SipDataManager(Context context, UserProfile userProfile) {
    this.context = context;
    this.userProfile = userProfile;
}

public void initialize() throws SipException {
    Log.d("mylog", "initialize manager");
    if (sipManager == null) {
        Log.d("mylog", "sip manager is not null");
        sipManager = SipManager.newInstance(context);
    }
    initializeProfile();
}

private void initializeProfile() throws SipException {
    if (sipManager == null)
        return;
    if (sipProfile != null) {
        close();
    }
    sipProfile = userProfile.build();
    Intent intent = new Intent();
    intent.setAction("ru.tenet.sipclient.INCOMING_CALL");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, Intent.FILL_IN_DATA);
    sipManager.open(sipProfile, pendingIntent, null);
    sipSession = sipManager.createSipSession(sipProfile, new MySipSessionListener());
    sipManager.setRegistrationListener(sipProfile.getUriString(), new MySipRegistrationListener());
}

public void close() {
    try {
        if (sipProfile != null) {
            sipManager.close(sipProfile.getUriString());
        }
    } catch (Exception ee) {
        Log.e("mylog", "Failed to close local profile.", ee);
    }
}
//getters and setters

我尝试删除此文件

sipSession = sipManager.createSipSession(sipProfile, new MySipSessionListener());

在这种情况下,我不会得到任何异常,但SipRegistrationListener回调不会得到调用。

只有重新启动才有帮助..

有人遇到过这个问题吗?我没有找到任何正确的解决方案..

解决方案 问题出在我的设备或固件上(三星Galaxy S4,Android 5.0.1官方版,但一些集成的应用程序已被根删除)。 已检查三星Galaxy S4与安卓4.3.1的氰化物-没有问题。

推荐答案

我遇到了同样的问题,无法以编程方式更正它。当前的解决方案是添加一个10秒的延迟处理程序,以检查OnRegistrationDone和OnRegiging事件是否在这段时间内触发。以下代码紧跟在InitializeLocalProfile函数中的mader.setRegistrationListener方法之前。当检测到此错误情况时,将启动SIP首选项活动,并向用户通知SIP库错误,请求他们重新启动设备。同一处理程序还检测连接到定义的SIP服务器时出现的问题,并向用户发出找不到服务器的通知。这两种错误情况通常都会触发"注册超时"错误,但您无法在该事件中区分这两种错误类型,超时需要30秒。

            if (!manager.isOpened(me.getUriString())) {
                if (me_listener == null) {
                    manager.open(me, pi, null);
                } else {
                    manager.open(me, pi, me_listener);
                }
            }
            // This listener must be added AFTER manager.open is called,
            // Otherwise the methods aren't guaranteed to fire.

            if (me_listener == null) {
                bConnecting = true;
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (sentConnecting == false && bLocalOpen == false) { //never connected or connecting
                            updateStatus("SIP Library Error");
                            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
                            SharedPreferences.Editor editor = prefs.edit();
                            editor.remove("namePref");
                            editor.remove("domainPref");
                            editor.putString("statusPref", "SIP Library Error - Please Restart Device and Try Again");
                            editor.commit();
                            updatePreferences();
                            return;
                        } else if (bConnecting == true && bLocalOpen == false) { //never connected
                            updateStatus("Server Not Found");
                            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
                            SharedPreferences.Editor editor = prefs.edit();
                            editor.remove("namePref");
                            editor.remove("domainPref");
                            editor.putString("statusPref", "Server Not Found, Please Edit and Try Again");
                            editor.commit();
                            updatePreferences();
                            return;
                        }
                    }
                }, 10000);

这篇关于无法创建SipSession;网络不可用,只能重新启动帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How to target newer versions in .gitlab-ci.yml using auto devops (java 11 instead of 8 and Android 31 instead of 29)(如何在.gitlab-ci.yml中使用自动开发工具(Java 11而不是8,Android 31而不是29)瞄准较新的版本)
Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
How to render something in an if statement React Native(如何在If语句中呈现某些内容Reaction Native)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
Using Firebase Firestore in offline only mode(在仅脱机模式下使用Firebase FiRestore)
Crash on Google Play Pre-Launch Report: java.lang.NoSuchMethodError(Google Play发布前崩溃报告:java.lang.NoSuchMethodError)