3

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

我知道如何用号码开始通话,但我不知道如何在通话期间打开通话屏幕,我尝试在没有号码的情况下进行 Intent.ACTION_CALL,但它会在另一个电话之上启动第二个电话:

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

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

4

2 回答 2

6

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

ACTION_CALL_BUTTON 正是这样做的。

如果通话正在进行,它将把它带到前面,如果不是,它将把通话记录带到前面。

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

于 2013-03-13T02:13:17.030 回答
0

我找到了一个似乎运作良好的不同解决方案。我有很多 Intents 组合,还尝试了上面建议的 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"            />
于 2014-01-08T20:43:15.483 回答