如何在后台运行android应用程序时显示呼叫屏幕



我正在为android 2.3.3制作一个SIP应用程序。我可以给别人打电话,当有人给我打电话时,我的"来电屏幕"会显示出来。但当我的应用程序在后台运行,有人打电话给我时,"通话屏幕"不会启动。那么我该如何让它像正常来电一样启动呢。

固定:

清单:在应用程序标签中添加以下代码

  <receiver android:name=".ReceiverTest" android:enabled="true">
             <intent-filter>
                 <action android:name="com.example.INCOMING_CALL" />
             </intent-filter>
  </receiver>

接收者类:当我接到电话时,它会打开我的Incomingcall页面

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);   
            ...     
    }
}

如果您正在使用"活动",则您的应用程序不会在后台运行。当一个新的活动被带到堆栈的顶部时,您的应用程序将暂停并放在后台。要允许您的应用程序接收任何类型的通知,请尝试运行服务或创建广播接收器来接收您想要收听的意图。这允许您的应用程序在不在堆栈顶部时进行处理。

更新

所以你已经注册了一个广播接收器。。。这很好。。。但是如果您在活动中注册了它,并且活动被终止,那么您的应用程序的引用和vm也是如此,并且没有收到意图。试着让你的广播接收器独立于活动(即让系统使用清单调用它)。然后,即使您的应用程序已经失效,您的广播接收器也可以接收意图,并启动您需要的内容。

另一种选择是制作一个注册接收器的服务——一个服务可以在后台运行,但你必须担心让你的服务足够轻,永远不会被杀死(更多技巧)。最好的选择是选项1(大大减少开销)。

最新更新