Android正在进行呼叫前进?

时间:2013-01-30 18:18:41

标签: java android

我正在构建一个通用访问应用,我的应用程序使用自定义拨号器全屏工作。因此,如果用户在打电话时回家或回来,我需要让他们有机会以某种方式回电话。 (事实上​​,我正在考虑在他们离开时自动重新打开正在进行的呼叫)。

我知道如何使用号码开始通话,但我不知道如何在通话期间打开incall屏幕,我尝试在没有号码的情况下进行Intent.ACTION_CALL,但是它会启动第二个电话呼叫。其他:

    Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"));
    startActivity(callIntent);

我认为这应该是有目的的,或者只是把它带到前面。但我不知道该怎么做。如何以编程方式重新打开正在进行的呼叫?

2 个答案:

答案 0 :(得分:5)

如果它仍然相关或其他对此感兴趣的人:

ACTION_CALL_BUTTON正是这样做的。

如果通话正在进行中,它会把它带到前面,如果不是,那就会 带上通话记录。

http://developer.android.com/reference/android/content/Intent.html#ACTION_CALL_BUTTON

答案 1 :(得分:0)

我找到了一个似乎运作良好的不同解决方案。我有许多Intent组合,并且还按照上面的建议尝试了ACTION_CALL_BUTTON,但在4.3中它打开了一个新的拨号器,并没有带你进行当前正在进行的调用。不确定这在旧的sdks中是如何表现的。经过大量的研究和尝试后,我发现这很好用,虽然它可能会使用一些优化......

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"            />