我一直在努力解决这个问题,但这是非常持久的。我正在开发一个具有原生android SIP堆栈的SIP客户端,我使用了两个设备来运行它。第一个设备是android 5.0.2,第二个是android 4.3 IIRC。较新的版本运行应用程序非常好但是当我尝试运行旧版本时,寄存器方法总是失败,这表示我使用的变量为null,但是由于注册过程的第一件事是不可能的创建要使用的变量。以下是我使用的功能:
public void createProfile(String id, String pas, String ip){
try {
SipProfile.Builder build = new SipProfile.Builder(id, ip);
build.setPassword(pas);
profile = build.build();
}catch (Exception e){
e.printStackTrace();
System.out.println("UNABLE TO CREATE PROFILE");
}
}
public void openProfile(Context context){
Intent i = new Intent();
i.setAction("com.ta.SipTes.INCOMING_CALL");
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, Intent.FILL_IN_DATA);
try {
manager.open(profile, pi, reglist);
} catch (Exception e) {
e.printStackTrace();
System.out.println("UNABLE TO OPEN PROFILE");
}
}
public void registerProfile(){
try{
manager.register(profile, 30, reglist);
}catch(Exception e){
e.printStackTrace();
System.out.println("UNABLE TO REGISTER PROFILE");
}
}
这是我以前称之为
的方法 public void register(String id, String pas, String dom){
createProfile(id, pas, dom);
openProfile(MainPage.this);
registerProfile();
}
我在onPostExecute中使用了这个方法,如下所示:
public void onPostExecute(String stream){
if (stream != null){
id = tes;
String pwd = "0";
String adr = "192.168.5.5";
register(id, pwd, adr);
}
}
}
这是我得到的错误日志:
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err: java.lang.NullPointerException
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err: at com.ta.SipTes.MainPage.openProfile(MainPage.java:160)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err: at com.ta.SipTes.MainPage.register(MainPage.java:291)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err: at com.ta.SipTes.MainPage$Process.doInBackground(MainPage.java:377)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err: at com.ta.SipTes.MainPage$Process.doInBackground(MainPage.java:362)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err: at java.lang.Thread.run(Thread.java:838)
01-25 19:32:51.195 25768-25789/com.ta.SipTes I/System.out: UNABLE TO OPEN PROFILE
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err: java.lang.NullPointerException
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err: at com.ta.SipTes.MainPage.registerProfile(MainPage.java:169)
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err: at com.ta.SipTes.MainPage.register(MainPage.java:292)
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err: at com.ta.SipTes.MainPage$Process.doInBackground(MainPage.java:377)
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err: at com.ta.SipTes.MainPage$Process.doInBackground(MainPage.java:362)
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err: at java.lang.Thread.run(Thread.java:838)
01-25 19:32:51.197 25768-25789/com.ta.SipTes I/System.out: UNABLE TO REGISTER PROFILE
知道为什么会这样吗?根植的旧设备也可能与它有关吗?
感谢您的回复
答案 0 :(得分:0)
好吧,我觉得真的很蠢,原来我的4.0.3设备没有原生SIP堆栈,甚至不能用本机SIP堆栈进行VoIP通话,它仍然可以进行VoIP通话如果您的应用拥有SIP堆栈。
搜索了一段时间后,我发现SipManager
可以使用isApiSupported
和isVoipSupported
来检查设备是否可以使用本机SIP堆栈。并且模拟器和android 4.0.3设备都返回false以进行检查,因此这就是为什么我一直得到空指针,因为设备没有使用本机SIP堆栈。
希望这可以成为某人的教训/建议,感谢您的回复