通話履歴に 100 件の通話があるとします。呼び出された一意の連絡先 (番号ではない) を見つけたい。問題は、連絡先に 2 つの電話番号がある場合 (たとえば、連絡先 A の場合、自宅の番号と携帯電話の番号がある場合)、その連絡先を 2 回カウントすることです。
以下を試しました。コールログを読んでいます。次に、通話ログの番号ごとに、次のカスタム関数を呼び出します。
private String getContactID (String number)
{
String contactID = "";
ContentResolver context = getContentResolver();
/// number is the phone number
Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(number));
String[] mPhoneNumberProjection = { PhoneLookup._ID };
Cursor cur = context.query(lookupUri,mPhoneNumberProjection, null, null, null);
try
{
if (cur.moveToFirst())
{
contactID = cur.getString(0);
return contactID;
}
}
finally
{
if (cur != null)
cur.close();
}
return contactID;
}
それで、連絡先IDと通話のタイムスタンプを含む通話ログがあり、セットを使用して一意のものを取得します...上記のコードは正常に機能しますが、パフォーマンスが非常に悪い場合は! 新しい Google Nexus 4 で試してみたところ、約 1600 ミリ秒かかりました。古いスマートフォンのことは考えたくない…
助言がありますか?