ユーザーの電話連絡先を読み取って表示するアプリケーションでオートコンプリート テキストビューを作成したいと考えています。最初にここにあるリンクを試してみましたが、問題はすべて UI スレッドで発生していたため、UI スレッドが 10 秒ほどフリーズしていました。
多くの例を見ましたが、すべて UI スレッドで発生します。
次に、グーグルでよく調べた後、cursoradapterの概念にたどり着き、ここにある非常に優れたプロジェクトを見つけましたが、問題はこの例が使用していContacts.CONTENT_URI
て、各連絡先に関連付けられた電話番号を取得できないことです. uri を に変更しようとしましたContactsContract.CommonDataKinds.Phone
が、うまくいきませんでした。
次に、getitem メソッドを次のように変更しました。
@Override
public Object getItem(int position) {
Cursor cursor = (Cursor) super.getItem(position);
Contact contact = new Contact();
String imageUri = cursor
.getString(ContactsQuery.PHOTO_THUMBNAIL_DATA_COLUMN);
Bitmap bitmap = loadContactPhotoThumbnail(imageUri,
mDropdownItemHeight);
if (bitmap == null) {
bitmap = mLoadingImage;
}
contact.id = cursor.getLong(ContactsQuery.ID_COLUMN);
Cursor phones = mContext.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contact.id, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.d(TAG, "Number: " + phoneNumber);
}
contact.lookupKey = cursor
.getString(ContactsQuery.LOOKUP_KEY_COLUMN);
contact.displayName = cursor
.getString(ContactsQuery.DISPLAY_NAME_COLUMN);
contact.image = bitmap;
return contact;
}
これにより連絡先番号がわかりますが、クエリは引き続き UI スレッドで発生すると思います。バックグラウンドスレッドで発生させたい。どうすればこれを達成できますか。
また、別のアプローチがあれば教えてください。