我想要在用户从联系人选取器中选择联系人后获取联系人姓名和电话号码。我试图让我的应用程序适用于SDK v3,因此我创建了一个只会调用我需要的API的抽象类。我已经有了抽象类工作(它选择了正确的API),我也有SDK v3.4工作的API。我在使用ContactsContract工作的较新的API时遇到问题。从联系人选取器中获取号码
我可以得到一个联系人的名字,但是它检索到的号码总是联系人ID的号码!例如:我在联系人中添加了2个联系人“John Doe”和“Jane Doe”,各自的号码分别为“555-555-555”和“777-777-7777”。 John Doe的ID = 1,Jane Doe的ID = 2。如果我试图得到Jane Doe的电话号码,我会收到John的电话号码,555-555-5555。如果我试图得到约翰的,我什么也没得到。检查if(cursor.moveToNext())是否失败。
你能帮我解决这个问题吗?这让我疯狂。我看了很多很多的例子,总是得到同样的错误。
意图的数据是从onActivityResult
import java.util.ArrayList;
import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts;
class NewContactsAdapterBridge extends ContactsAdapterBridge {
ArrayList<String> info = new ArrayList<String>();
ArrayList<String> getInfo (Activity a, Intent data) {
Uri contactData = data.getData();
Cursor cursor = a.managedQuery(contactData, null, null, null, null);
if (cursor.moveToFirst()) {
String id = cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndexOrThrow
(ContactsContract.Contacts.DISPLAY_NAME));
String hasPhoneNumber = cursor.getString(cursor.getColumnIndexOrThrow(
ContactsContract.Contacts.HAS_PHONE_NUMBER));
info.add(name);
if (Integer.parseInt(hasPhoneNumber) > 0) {
Uri myPhoneUri = Uri.withAppendedPath(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
id);
Cursor pCur = a.managedQuery(
myPhoneUri,
null,
null,
null,
null);
if (pCur.moveToNext()) {
String number = pCur.getString(pCur.getColumnIndex
(ContactsContract.CommonDataKinds.Phone.NUMBER));
info.add(number);
}
}
}
return info;
}
}
非常感谢你。你的代码和我发现的其他代码都不一样,并且效果很好。此外,您的代码来选择哪个数字是非常有用的。 – user543010 2011-05-28 04:19:27
工程就像一个魅力。我忘记添加READ_CONTACTS权限,因此一开始没有工作,但后来这是我发现的最好的选择。谢谢。 :) – buggydroid 2013-01-08 20:03:28
什么是CONTACT_PICKER_RESULT?我无法做到。 – DuyguK 2013-01-29 14:12:42