我希望有人可以为我指出一些好的资源或正确的方向,或者甚至更好地抽出一些代码片段/伪代码来帮助我。
我是 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 的实例在不消耗手机资源的情况下监听来电?
干杯!