SIP Android应用程序,如何使用服务和活动

我很乐意有人可以指点我一些好的资源或正确的方向,甚至更好地抽出一些代码片段/伪代码来帮助我.

我是android devel的新手,我的任务是创建一个使用sip库来制作/接收sip调用的应用程序.该库是相当抽象的,并且所有都与“电话”实例一起工作,我可以调用.rejectCall(),. haswerCall()等等.要获取手机的实例,我使用此行:

AbtoPhone abtoPhone = ((AbtoApplication)getApplication()).getAbtoPhone();

这一切都很好,花花公子,但没有正确理解活动和服务我不知道如何把它变成一个应用程序.

我希望用户能够登录,使用SIP服务器注册,然后让手机收听电话.

我希望它在放入后台时继续收听电话.在后台我想弹出一个允许有人接听或拒绝来电的对话框,并且在回答时我希望初始活动被唤醒(或者如果它被杀死然后我希望它启动)并被带到前景让用户可以愉快地聊天.

我怎么做到最好呢?目前我正在主活动中获取AbtoPhone,添加帐户,添加所有监听器,然后当用户点击注册按钮时,它启动一个粘性服务,获取自己的电话实例,使用相同的命令像之前一样.

然后,在服务中,我使用sip客户端注册用户.现在,当我关闭主活动时,它会继续运行并且会收到一个调用,但是它会因异常而崩溃:

android.view.WindowManager$BadTokenException: Unable to add window 
-- token android.os.BinderProxy@4154ebb0 is not valid; 
is your activity running?

我知道我的问题是原来的活动,称服务已经死了,我正试图唤醒它.但我只是不知道如何正确地做到这一点.

我得到的服务和活动是一个重复的问题,我已经环顾四周阅读教程但是我不知道如何正确地将它们应用到我的案例中,并希望有人能够说出做X,开始服务,通过这个,当你接到电话做Y和VOILA!但任何帮助,所以将是非常大的,非常感谢!

干杯,

DJOodle

>>>>编辑

好的,我把AbtoPhone的所有处理都转移到了服务上.当我接到一个电话时,我调用MainActivity,将它绑定到服务,所以我可以调用正确的方法来接听电话.

这很好,它可以工作,但这意味着我有一个始终在运行的持久服务,我觉得这是一个坏的,坏的事情.如何在不耗尽电话资源的情况下保持AbtoPhone实例收听电话?

干杯!

最佳答案 这是一个很大的话题.我认为你应该给一个开源应用程序Sip-Droid一个机会.所以你可以使用任何与之相关的东西.

http://code.google.com/p/sipdroid/

这是一个基于Sip的应用程序,可以执行您要求的所有操作.我认为你可以使用源代码并重新开发你想要的任何东西.
这个应用程序使用的JNI比Sip更复杂.所以在这个应用程序中使用所有JNI,您会发现许多可以使用的库,并使工作更快.

点赞