4

我希望有人可以为我指出一些好的资源或正确的方向,或者甚至更好地抽出一些代码片段/伪代码来帮助我。

我是 android devel 的新手,我的任务是创建一个使用 sip 库进行/接收 sip 调用的应用程序。这个库是相当抽象的,所有的工作都与一个“电话”实例一起工作,我可以称之为 .rejectCall()、.answerCall() 等等。要获取电话的实例,我使用以下行:

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?

我知道我的问题是调用该服务的原始活动已死,我正试图唤醒它。但我只是不知道如何正确地做到这一点。

我知道服务和活动是一个重复的问题,我环顾四周阅读教程,但是我看不到如何正确地将它们应用到我的案例中,只是希望有人能够说 Do X,启动服务,通过这个,什么时候你接到一个电话,Y 和 VOILA!但是任何帮助都会非常感激,非常感谢!!!

干杯,

DJOodle

>>>> 编辑

好的,我已将 AbtoPhone 的所有处理转移到服务中。当我接到电话时,我会调用 MainActivity,将其绑定到服务,这样我就可以调用正确的方法来接听电话。

这很好,它可以工作,但这意味着我有一个始终在运行的持久服务,我觉得这是一件坏事,坏事。我怎样才能让 AbtoPhone 的实例在不消耗手机资源的情况下监听来电?

干杯!

4

1 回答 1

2

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

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

这是一个基于 Sip 的应用程序,可以满足您的所有要求。我认为您可以使用源代码并从中重新开发您想要的任何东西。此应用程序使用 JNI,它是比 Sip 更复杂的主题。所以在这个应用程序中使用所有的 JNI,你会发现很多你可以使用的库,并使工作更快。

于 2012-08-09T13:05:14.293 回答