如何在后台运行android应用程序时显示通话屏幕
Posted
技术标签:
【中文标题】如何在后台运行android应用程序时显示通话屏幕【英文标题】:how to show call screen while android app running on background 【发布时间】:2012-03-09 13:53:29 【问题描述】:我正在为 android 2.3.3 制作一个 SIP 应用程序。我可以给某人打电话,当有人给我打电话时会显示我的“来电屏幕”。但是当我的应用程序在后台运行并且有人打电话给我时,“通话屏幕”没有启动。那么我怎样才能让它像正常来电一样启动。
已修复:
清单:在应用标签中添加以下代码
<receiver android:name=".ReceiverTest" android:enabled="true">
<intent-filter>
<action android:name="com.example.INCOMING_CALL" />
</intent-filter>
</receiver>
Receiver类:当我接到电话时,它会打开我的来电页面
public class ReceiverTest extends BroadcastReceiver
@Override
public void onReceive(Context arg0, Intent arg1)
...
Intent nextPage= new Intent("com.example.IncomingPage");
nextPage.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
arg0.startActivity(nextPage);
...
【问题讨论】:
您说的是传入的 SIP 呼叫还是 VOICE 呼叫? 【参考方案1】:如果您使用的是 Activity,则您的应用不会在后台运行。当一个新的活动被带到堆栈的顶部时,您的应用程序将暂停并放置在后台。要允许您的应用程序接收任何类型的通知,请尝试运行服务或创建广播接收器来获取您想要侦听的意图。这允许您的应用在不在堆栈顶部时进行处理。
更新
所以你已经注册了一个广播接收器......这很好......但是......如果你在你的活动中注册了它并且活动被杀死了,那么你的应用程序的引用和虚拟机也是如此,并且意图不是已收到。尝试使您的广播接收器独立于活动(即让系统使用清单调用它)。然后,即使您的应用程序已死,您的广播接收器也可以接收意图,并启动您需要的内容。
另一种方法是创建一个注册您的接收器的服务 - 一个服务可以在后台运行,但您必须担心让您的服务足够轻而不会被杀死(更多技巧)。最好的是选项 1(开销更少)。
【讨论】:
我认为你不了解我,或者我不了解你。让我解释一下这种方式。我运行我的应用程序,然后注册我的广播接收器以接收来电,它在我的应用程序中运行良好。如果我按下“主页按钮”,我的应用程序会进入后台,但我仍然可以接听电话,现在问题来了,我希望我的应用程序出现在屏幕上,以便我可以拒绝或接听电话。 我明白你在说什么。当您的应用程序在后台运行时,当有人呼叫您时,您的呼叫屏幕不会显示。再次......在后台运行的应用程序出于所有目的都是“死的”,除非有一个广播接收器可以获取来电的意图,或者一个正在检测它的服务。阅读更新以获取更多信息.... 哦,现在我知道你的意思了,谢谢你的理解以上是关于如何在后台运行android应用程序时显示通话屏幕的主要内容,如果未能解决你的问题,请参考以下文章