我很高兴有人能指出一些好的资源或正确的方向,甚至更好地抽出一些代码片段/伪代码来帮助我。
我是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的实例来收听电话?
干杯!
答案 0 :(得分:2)
这是一个很大的话题。我认为你应该给一个开源应用程序Sip-Droid一个机会。所以你可以使用与之相关的任何东西。
http://code.google.com/p/sipdroid/
这是一个基于Sip的应用程序,可以执行您要求的所有操作。我认为你可以使用源代码并重新开发你想要的任何东西。 这个应用程序使用的JNI比Sip更复杂。所以在这个应用程序中使用所有JNI,您会发现许多可以使用的库,并使工作更快。