3

着信コールを検出するためにリスナーの下に
ある 着信コールのたびに CallLog コンテンツ プロバイダにクエリを作成する
ほんの数秒前にすでにコールがログに記録されていても、カーソルは常に null を返す
ところで、プロジェクトを実行する前にコール ログをクリアしました日食
では、着信コールのたびにカーソルを最初の行に向けることができるようにしたいのですが、うまくいきません

// Listener to detect incoming calls.

private class CallStateListener extends PhoneStateListener {

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {

        if (previousState == TelephonyManager.CALL_STATE_RINGING
                && state == TelephonyManager.CALL_STATE_IDLE) {

            cursor = context.getContentResolver().query(
                    CallLog.Calls.CONTENT_URI, projection, null, null,
                    Calls.DEFAULT_SORT_ORDER);

            Log.i("SIZE OF CURSOR", String.valueOf(cursor.getCount()));

            if (cursor.moveToFirst()) {

            }// end if
        }// end if

        Log.i("onCallStateChanged",
                String.format("State changed to %d", state));

        previousState = state;

    }// end onCallStateChanged()
}// end CallStateListener class

Cursor cursor;
private String[] projection = new String[] { Calls.TYPE, Calls.NUMBER };
4

2 に答える 2

3

同様に、通話後のログから通話を読み、いくつかの問題が発生しましたが、有効な解決策があります。考慮すべき点が 2 つあります。

1) 定数の使用時に一部のデバイスで問題が発生しました

CallLog.Calls.CONTENT_URI

代わりに URI 文字列を直接使用してみてください。

Uri.parse("content://call_log/calls")

2) 通話終了後に通話ログを読む速度が速すぎます。リスナーを 1000 ミリ秒スリープさせて、クエリを実行する前に通話ログを更新させます。

于 2013-08-02T10:24:22.723 に答える
0

ローカル カーソル変数 ~.~ を使用してみてください。クエリが null を返さないことを確認してください ~.~

于 2013-08-02T10:12:06.203 に答える