我正在构建一个通用访问应用,我的应用程序使用自定义拨号器全屏工作。因此,如果用户在打电话时回家或回来,我需要让他们有机会以某种方式回电话。 (事实上,我正在考虑在他们离开时自动重新打开正在进行的呼叫)。
我知道如何使用号码开始通话,但我不知道如何在通话期间打开incall屏幕,我尝试在没有号码的情况下进行Intent.ACTION_CALL,但是它会启动第二个电话呼叫。其他:
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"));
startActivity(callIntent);
我认为这应该是有目的的,或者只是把它带到前面。但我不知道该怎么做。如何以编程方式重新打开正在进行的呼叫?
答案 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" />