0

発信コールに応答する方法を見つけようとしていますが、解決策が得られませんでした。BroadcastReceiver、TelephonyManager、PhoneStateLinstener を使用しましたが、発信通話の RINGING 状態を取得できませんでした。また、通話履歴を読み取って現在の通話の時間を検索しようとしましたが、発信通話の通話履歴は終了後に保存されました。

パブリック API では不可能であると読みました。内部APIを使用するなど、別の方法で可能のようです。そのようなアプリが市場に出回っているのを見ることができるので、それを行う何らかの方法があると思います。

手がかりを教えてください。あなたの知識を共有してください。

ありがとう。

4

2 に答える 2

0

以下のようなものを試してみてください。私はずっと前にそれをしました。

1) 登録OutGoingCallReceiver(SOに対する検索意図アクション)

2) ( PhoneStateChangeReceiverintent-Action:-) を登録するACTION_PHONE_STATE_CHANGED

SharedPrefernces3)または global内に 1 つのフラグを作成しますvariable

4) OutgoingCallReceiver でこのフラグを true にします。これで、通話が選択されたときに のように状態が取得される CALL_STATE_OFFHOOK のでPhoneStateChangeReceiver、これが着信通話がフックされたか、発信通話がフックされたかを判断できます。適切な場所でフラグを無効にします。

onHooked の時間を節約することもできます。

于 2013-02-09T12:13:26.737 に答える
0

私は、この質問に対するかなり遅い答えを知っています。しかし、私は今日それに出くわし、アイデアを持っていたので、それを共有します. 将来、投稿にアクセスする他の誰かを助けるかもしれません。

PhoneStateListener クラスの onCallStateChanged メソッドで前回の発信時刻を確認できると思います。状態がアイドル状態 (TelephonyManager.CALL_STATE_IDLE) の場合にデータを取得します。

このようなもの:

Cursor mCallCursor = context.getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI,null,null,null,null);
int duration = mCallCursor.getColumnIndex( CallLog.Calls.DURATION);
while(mCallCursor.moveToFirst())
{   
    Toast.makeText(context, mCallCursor.getString(duration), Toast.LENGTH_LONG).show();
}

詳細については、こちらを参照してください。上記のコードはテストしていません。しかし、そのようなものはうまくいくはずです。

時刻が 00:00 であるかどうかを確認できます。電話に出られませんでした。それ以外の場合、呼び出しは応答されました。

これがお役に立てば幸いです。

于 2014-04-26T13:28:24.427 に答える