Android如何将正在通话中的界面置于前台?

3
我正在开发一款通用应用程序,该应用程序在全屏幕中使用自定义拨号器。因此,如果用户在电话通话期间按下主页或返回键,则需要让他们有机会以某种方式返回通话。(实际上,我考虑如果他们离开,自动重新打开正在进行的通话)。
我知道如何使用号码开始通话,但是我不知道如何在通话期间打开接通屏幕,我尝试了Intent.ACTION_CALL,但没有号码,它会在其他通话之上启动第二个电话通话:
    Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"));
    startActivity(callIntent);

我认为可以通过意图或简单地将其置于前台来实现。但我不知道该怎么做。如何以编程方式重新打开正在进行的通话?


但我认为如果有电话呼入,它会自动覆盖其他应用程序的屏幕并显示在前面? - AAnkit
是的,但如果用户在通话期间点击“返回”或“主页”,他可以在其他应用程序中保持电话摘机状态。我需要一些方法将他带回来。 - lisovaccaro
这是用户所做的,您为什么不让它保持原样呢? - AAnkit
因为这是一个通用访问应用程序,有时用户会意外地做一些事情,比如离开正在进行的对话,我需要一些方法将其带回前台。此外,该应用程序具有拨号器,但默认拨号器提供了“返回呼叫屏幕”按钮,但由于我正在使用自己的覆盖,因此需要实现自己的“返回”按钮。更重要的是,我的应用程序具有全屏设置,(由于没有状态栏),除非我在我的应用程序上创建一个按钮/防止用户离开,否则基本上不可能返回到呼叫屏幕。 - lisovaccaro
好的,现在明白了,你试过Intent.ACTION_DIAL吗? - AAnkit
显示剩余2条评论
2个回答

6

1
CyanogenMod 2.3在HTC Hero上 - 它打开拨号而不是“通话进行中”屏幕。 - Zakus
截至发表此评论的日期,这个答案完美地运作。你只需要在原始代码中摆脱第二个参数:Uri.parse("tel:") - Sweetie Anang
1
无法在三星手机上正常工作,即使通话正在进行中,它也总是打开拨号器。 - Mathieu H.

0

我找到了一个不同的解决方案,似乎很有效。我尝试了许多Intent的组合,并且也尝试了上面建议的ACTION_CALL_BUTTON,但在4.3中它会打开一个新的拨号器,而不是带你去当前正在进行的通话。不确定这在旧的SDK中的行为如何。经过大量的研究和尝试,我发现这个方法很好用,虽然可能需要一些优化...

telephonyManager = (TelephonyManager) getSystemService( Context.TELEPHONY_SERVICE );
if( telephonyManager.getCallState() == TelephonyManager.CALL_STATE_OFFHOOK )
{
    ActivityManager m = (ActivityManager)getSystemService(ACTIVITY_SERVICE);    
    List<RunningTaskInfo> tasks = m.getRunningTasks( 10 );
    for( int i = 0; i < tasks.size(); ++i )
    {
        RunningTaskInfo task = tasks.get( i );
        ComponentName component = task.baseActivity;
        String packageName = component.getPackageName();
        if( packageName.contains( "com.android.phone" ) )
        {
        m.moveTaskToFront( task.id, 0 );
        return;
        }
    }
}

您还需要将权限添加到您的清单文件中:

<uses-permission android:name="android.permission.GET_TASKS"                />
<uses-permission android:name="android.permission.REORDER_TASKS"            />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接