Новое приложение, мне нужно импортировать все контакты с мобильного телефона,
Я запускаю приведенный ниже код в классе AsyncTask.
Он работает нормально, но очень медленно, на устройстве с 2000 контактами устройство зависает на несколько мгновений. Я знаю, что это можно сделать намного быстрее, поскольку многие приложения используют контакты.
Любые идеи?
public ArrayList<ContactInfo> getContacts() {
ArrayList<ContactInfo> arrayList = new ArrayList<ContactInfo>();
ContentResolver cr = GlobalData.instance().getContext().getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, Phone.DISPLAY_NAME + " ASC");
String id;
String name;
int counter = 0;
if (cur.getCount() > 0) {
int indexId= cur.getColumnIndex(ContactsContract.Contacts._ID);
int indexName = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int indexHasPhoneNum = cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
Log.d("getContacts", "Start");
while (cur.moveToNext()) {
id = cur.getString(indexId);
name = cur.getString(indexName);
if (Integer.parseInt(cur.getString(indexHasPhoneNum)) > 0) {
// Query phone here. Covered next
Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, null, null);
while (phones.moveToNext()) {
int type = phones.getInt(phones.getColumnIndex(Phone.TYPE));
if(type == Phone.TYPE_MOBILE){
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
arrayList.add(new ContactInfo(name, phoneNumber));
counter++;
}
}
phones.close();
}
}
Log.d("getContacts", "End (" + counter + ")" );
}
cur.close();
return arrayList;
1 ответ
После некоторого поиска с другими ресурсами и некоторого здравого смысла ответ для получения всех мобильных телефонов в устройстве - запросить ContactsContract.CommonDataKinds.Phone.CONTENT_URI вместо ContactsContract.Data.CONTENT_URI и навести на него курсор.
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .