1

何らかの理由で、CallLog コンテンツ プロバイダーにクエリを実行すると、最大 500 件の結果が得られます。また、結果は 1 か月前までしか得られないようです (デバイスの電話アプリが現時点で約 8 か月を表示している場合)。

私はそれをグーグルで調べましたが、私が見つけたのは「'CallLog.Calls'を別のテーブルに保存する」だけで、解決策はありません。

これは私のコードです:

String[] strFields = {
                    android.provider.CallLog.Calls.NUMBER,
                    android.provider.CallLog.Calls.DURATION,
                    android.provider.CallLog.Calls.DATE,
            };

            Cursor cursor = MainApplication.getAppContext().getContentResolver().query(
                    android.provider.CallLog.Calls.CONTENT_URI,
                    strFields,
                    null,
                    null,
                    null
            );

            if (cursor != null) {
                Log.d("aaa", cursor.getCount());
                ...
            }
            ...

上限を追加してみましたが、何も変わりませんでした。

私の結果が限られている理由を誰か知っていますか?

編集:

Android コードを少し掘り下げた後、android.provider.CallLog のremoveExpiredEntries ()というメソッドにたどり着きました。

private static void removeExpiredEntries(Context context) {
        final ContentResolver resolver = context.getContentResolver();
        resolver.delete(CONTENT_URI, "_id IN " +
                "(SELECT _id FROM calls ORDER BY " + DEFAULT_SORT_ORDER
                + " LIMIT -1 OFFSET 500)", null);
}

これは、通話がログに追加されるたびに呼び出されます:/ これは、通話ログ コンテンツ プロバイダーが最大 500 エントリを返すことができることを意味します。

これは私に疑問を残します: ネイティブの電話アプリ (私の場合、Samsung の電話アプリ) は、さらに何千ものエントリがあるように見えるものをどのように表示しますか?

4

1 に答える 1

1

ログを見て、500 を超えるエントリがある場合、コンテンツ プロバイダは実際にエントリを削除し、デバイスの電話アプリがログを自動的に保存するという結論に達しました。

于 2013-09-28T19:56:59.457 に答える