2

私の目標は、通話履歴から不明な電話番号をすべて収集することです。これは、次のコードで実現できます。

private static final String[] CALLOG_PROJECTION = {CallLog.Calls._ID,
        CallLog.Calls.CACHED_NAME, CallLog.Calls.NUMBER};
private static final String CALLOG_WHERE = CallLog.Calls.CACHED_NAME + " is null";

Cursor c = getContentResolver().query(CallLog.Calls.CONTENT_URI, CALLOG_PROJECTION,
        CALLOG_WHERE, null, CallLog.Calls.DATE + " DESC");

これはうまく機能しますが、不明な番号から連絡先を作成した後でも、クエリの結果には不明な番号が含まれています。

コール ログ アクティビティ ウィンドウを開くと、数秒以内に番号が連絡先の名前に変わるのがわかります。したがって、アクティビティは CACHED_NAME 列を更新します。

私の質問は、どうすればコール ログをプログラムで更新 (実現) できますか?

4

1 に答える 1

7

私はあなたがやろうとしていることを最適化する方法を探してこの質問にたどり着きました。cached_nameを使用する代わりに、電話コンテンツプロバイダーにすべての番号を照会して実際の名前を取得しましたが、これによりパフォーマンスの問題が発生しました。

変更が発生すると、ストックアプリケーションがリストを更新することに気付きました。

PhonesテーブルにContentObserverを実装し、それが発生したときに名前を更新します。機能する場合は投稿します。


編集

(Googleの)連絡先アプリのソースコードをチェックしていましたが、基本的に最初にCACHED_NAMEのリストが表示され、リストが表示された後、連絡先の詳細に変更があったかどうかが(バックグラウンドで)チェックされます。存在する場合は、CallLogレコードとリストを更新します。

基本的に、私は似たようなものを実装しましたが、それは機能します。CallLogには多数の繰り返し番号があるため、変更のバックグラウンドをチェックしているときにリストをスクロールすると、パフォーマンスの問題が発生しました。したがって、基本的には、これらの番号がすでにチェックアウトされているかどうかを確認する必要があります。

それが役に立てば幸い!

于 2011-01-06T11:22:02.460 に答える