2

ルート化されたNexusでCM7を実行しています。発信通話が実際にいつ接続されたかを検出しようとしています: 呼び出しが停止し、通話相手が応答しました。フォーラムを見てみると、これは難しく、おそらく答えのない質問のようです。これについての洞察をいただければ幸いです。

私の検索では、次のものが見つかりました。 Android : 発信通話に応答した状態を取得するにはどうすればよいですか? @PattabiRaman は次のように述べています。彼は、通話の進行中に最後にダイヤルされた通話の継続時間を取得する必要があるということですか? そして、その持続時間が 0 を超えると、わかりますか?

4

2 に答える 2

1

クラスcom.android.internal.telephony.CallManagerには、呼び出しが実際にいつ応答されるかに関する情報が必要です。getInstance()これには、CallManager インスタンスを返すpublic static メソッドとgetActiveFgCallState()、現在の通話状態をCall.State列挙型として返す public メソッドがあります。
したがって、理論的には、次のようなものが機能する可能性があります。

Method getFgState = null;
Object cm = null;

try {
  Class cmDesc = Class.forName("com.android.internal.telephony.CallManager");
  Method getCM = cmDesc.getMethod("getInstance");
  getFgState = cmDesc.getMethod("getActiveFgCallState");
  cm = getCM.invoke(null);
} catch (Exception e) {
  e.printStackTrace();
}

そして、状態を繰り返しポーリングします。

Object state = getFgState.invoke(cm);
if (state.toString().equals("IDLE")) {
  ...
} else if (state.toString().equals("ACTIVE")) {
  // If the previous state wasn't "ACTIVE" then the
  // call has been established.
}

これが実際に機能することは確認していません。また、API が変更される可能性があることを念頭に置いておく必要があります。これは、アプリ開発者が依存するものではないためです。

于 2012-08-20T17:35:36.137 に答える