我试图在用户从联系人选择器中选择联系人后获取联系人姓名和电话号码 . 我试图使我的应用程序适用于SDK v3及以上,所以我创建了一个只调用我需要的API的抽象类 . 我已经有抽象类工作(它选择了正确的API),我也有SDK v3,4的API工作 . 我在使用ContactsContract工作的新API时遇到问题 .
我可以获得联系人姓名,但它检索的号码始终是联系人ID之前的号码!示例:我有两个联系人“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())是否失败 .
你能帮帮我解决这个问题吗?这让我发疯了 . 我看了很多例子,总是得到同样的错误 .
Intent数据是来自onActivityResult的数据Intent
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;
}
}
5 回答
您需要对此进行调整才能使用您的应用
我得到了行案例CONTACT_PICKER_RESULT ...我上面使用的代码
这些代码有助于你,我认为PICK活动只返回所选联系人的ID . 从那里你可以查询联系提供商,如果有多个电话号码,提示用户选择其中一个 .
你也可以使用它
适合初学者的注意事项,不要忘记包括以下许可,否则它将无法正常工作
<uses-permission android:name="android.permission.READ_CONTACTS"/>