У меня похожие проблемы в моем приложении.Приложение представляет собой виджет, который дает возможность быстро использовать избранные контакты.Пользователь создает новый виджет и назначает ему контакт.Когда он нажимает на виджет, он может выполнять общие действия с контактами - звонить, отправлять смс, редактировать и т. Д.
Некоторые пользователи отправляют отчет, например, такой: «Я выбираю около 4 контактов, и приложение показывает 4, но только одноиз них правильные 3 других - тот же самый контакт, который я даже не выбрал ".«Почему неправильный контакт отображается при выборе? На моем дроиде невероятно»
Я не могу воспроизвести проблему на моей стороне.Я пробовал несколько разных устройств, пытался установить контакты импорта / экспорта - безрезультатно.
В любом случае, у меня есть некоторые идеи об источнике проблемы.
Мое приложение использует ключи поиска для хранения контактов, в соответствии с sdk .Поэтому, когда пользователь выбирает контакт, приложение сохраняет ключ поиска контакта.Затем он использует этот ключ поиска, чтобы получить идентификатор контакта для этого контакта.После этого он использует ТОЛЬКО полученный Contact ID во всех других функциях.Так ли ваша функция - она использует только контактный идентификатор в подзапросе.
Вопрос: возможно ли, что разные контакты (с разными ключами поиска) имеют один и тот же контактный идентификатор?Похоже, что это возможно на некоторых устройствах в редких случаях ... Если это так, нам нужно использовать Contact ID + ключ поиска всегда вместе, чтобы идентифицировать контакт. ( update: предложение было неверным. Lookupключ может быть изменен после изменения контактной информации, вы не найдете контакт ).
Как я понимаю, вы можете воспроизвести проблему на вашей стороне.Я бы предложил изменить ваш код следующим образом:
infobtn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur.getCount() > 0)
{
while (cur.moveToNext()) {
id_contact = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
name_contact = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String lookup_key = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
if (name_contact.equals(name1))
{
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ? AND " + ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY + " = ?", new String[]{id_contact, lookup_key}, null);
id_contact2 = id_contact;
while (pCur.moveToNext()){
}
pCur.close();
}
}
Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + id_contact2));
startActivity(intent_contacts);
}
}
});
и попытаться воспроизвести проблему снова.