我使用Android原生Sip api来初始化Sip客户端。因为我对Sip协议感到困惑,所以我阅读了关于sip的android开发者文档并关注它。当我在Nexus5上运行我的应用程序时,它运行正常,但是当我运行时它在其他设备上如coolpad,它从SipManager抛出NullPointException。以下是我的代码。由于某种原因,用户名,密码和域是私有的。
DATE
以下是我的logcat。最奇怪的是,我发现api isApiSupported返回true,而SipManager对象不为null。我找不到它的原因。
public static SipManager manager;
public static SipProfile me;
public static String username;
public static String passwd;
public static void initializeSip(Context context) {
System.out.println("initializeSip");
if (manager == null) {
manager = SipManager.newInstance(context);
}
if (me != null) {
closeLocalProfile();
}
username = SharedPreferences.getLoginInfo().getModel().getVos_phone();
passwd = SharedPreferences.getLoginInfo().getModel().getVos_phone_pwd();
try {
if (!(SipManager.isApiSupported(context) && SipManager.isVoipSupported(context))) {
System.out.println("cannot support");
return;
}
System.out.println("isApiSupported="+SipManager.isApiSupported(context));
System.out.println("SipManager="+SipManager.newInstance(context));
SipProfile.Builder builder = new SipProfile.Builder(username, domain);
builder.setPassword(passwd);
me = builder.build();
manager.open(me);
SipRegistrationListener listener = new SipRegistrationListener() {
@Override
public void onRegistering(String localProfileUri) {
System.out.println("Registering with SIP Server");
}
@Override
public void onRegistrationDone(String localProfileUri, long expiryTime) {
System.out.println("Register success");
}
@Override
public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage) {
System.out.println("Registeration failed.Please check Settings.");
System.out.println("errorCode="+errorCode);
System.out.println("errorMessage="+errorMessage);
}
};
manager.setRegistrationListener(me.getUriString(),listener);
manager.register(me,3000,listener);
} catch (ParseException e) {
e.printStackTrace();
} catch (SipException e) {
e.printStackTrace();
}
}