3

ユニバーサルアクセス用のアプリを作成しています。アプリはカスタムダイヤラーを使用してフルスクリーンで動作します。したがって、ユーザーが電話中にホームまたはバックを押した場合、私はユーザーに何らかの方法で電話を返す機会を与える必要があります。(実際、彼らが去った場合、進行中の通話を自動的に再開することを考えています)。

番号を使用して通話を開始する方法は知っていますが、通話中に着信画面を開く方法がわかりません。番号を指定せずにIntent.ACTION_CALLを実行しようとしましたが、2番目の通話が開始されます。

    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

うまくいくと思われる別の解決策を見つけました。インテントの多くの組み合わせと、上記の 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"            />
于 2014-01-08T20:43:15.483 に答える