12

番号、日付、期間、およびタイプを使用して Android 通話ログにエントリをプログラムで挿入することはできますが、写真、ラベル、および名前も含める方法がわかりません。追加するエントリは、まったく同じ番号を持つ既存の連絡先用です。番号が既存の連絡先と一致する場合、Motorola デバイスでは名前と写真が表示されることに気付きましたが、私の HTC Incredible では何か不足していますか?

私は次のことを行います..(写真のために何をしようかさえ知りませんでした)

ContentValues values = new ContentValues();
values.put(CallLog.Calls.NUMBER, number);
values.put(CallLog.Calls.CACHED_NAME, name);
values.put(CallLog.Calls.CACHED_NUMBER_LABEL, label);
values.put(CallLog.Calls.DATE, date);
values.put(CallLog.Calls.DURATION, duration);
values.put(CallLog.Calls.TYPE, myCallType);
context.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
4

2 に答える 2

2

通話履歴自体に写真を挿入することはできません。これらは、通話ログ エントリにリンクされている連絡先に保存されます。その方法の詳細については、 ContactsContract.Dataを参照してください。

HTC デバイスが通話ログを既存の写真で更新しない限り、HTC Sense が通話ログ エントリをキャッシュする方法に関連している可能性があります。Sense デバイスでのみ発生する同様の問題を見てきました。

通話ログ エントリは通常calls、連絡先アプリ データベースのテーブルに保存されます ( /data/data/com.android.providers.contacts/databases/contacts2.db)。何らかの理由で、連絡先データが変更された場合、HTC Sense は既存の通話ログ エントリを更新しないように見えますが、他の ROM は更新します。

たとえば、ストック センス 5.0 を搭載した HTC EVO LTE を使用して、「ジェニー スミス」として保存した人に電話をかけると、callsテーブルにエントリが作成され、nameそこにジェニー スミスが保存されます。彼女の連絡先情報を「Jenny Jones」に更新し、新しい電話をかけると、callsテーブルに新しいエントリが Jenny Jones という名前で保存されますが、以前のエントリは変更されません。実際の通話履歴画面にはすべての通話が Jenny Jones として表示されますが、データベース自体には古い名前が付けられています。

私がテストした他のデバイス (Nexus 5 を含む)callsは、通話ログが表示されると、テーブル内の以前のエントリを更新します。Motorola デバイスはおそらく Nexus 5 のように動作し、必要に応じてデータを更新します。

私はデータベースの達人ではありませんが、データベースについてある程度の知識は持っています。callsデータベース構造の観点からすると、連絡先固有の情報がそのテーブルに保存されているのは奇妙に思えます (実際の連絡先情報がすべて保存されているデータベースraw_contacts_idのテーブルの同じフィールドにリンクされているフィールドが含まれています)。 contacts、しかし、それが実装方法です。

于 2014-02-28T21:39:43.193 に答える
1

それを行う唯一の合理的な方法(とにかく私にとってはうまくいきます)は、連絡先をハンドセットに直接追加し、その連絡先を指す通話ログを追加することです。その後、連絡先をハンドセットから削除できます。これに関する唯一の問題は、連絡先を削除する前にアプリが強制終了された場合です。そのため、次のアプリの起動時に何らかのクリーンアップを実装する必要があります。単純なタスクであるべきものがすべて非常に面倒です。

于 2014-03-03T09:22:41.860 に答える