我遵循了本教程并获得了内容提供商的基础知识:http://www.vogella.de/articles/AndroidSQLite/article.html
但是想知道如何获取与显示名称相对应的联系号码。试过“ContactsContract.Contacts.CONTENT_VCARD_TYPE”。但是得到了一个错误。
如果有任何解决方案,请告诉我。
感谢
斯纳
答案 0 :(得分:4)
这是一个关于使用android
中的内容提供商获取联系号码的好教程http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/
和
http://www.app-solut.com/blog/2012/06/retrieval-of-contacts-with-contact-contract/
可以选择这样的联系电话
添加按钮点击事件,如
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
i = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(i, PICK_CONTACT);
}
});
//outside button click
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT):
if (resultCode == Activity.RESULT_OK) {
getContactInfo(data);
}
}
}
// onActivityResult
private void getContactInfo(Intent data) {
// TODO Auto-generated method stub
ContentResolver cr = getContentResolver();
Cursor cursor = managedQuery(data.getData(), null, null, null, null);
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
Name = cursor
.getString(cursor
.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String hasPhone = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
Cursor emailCur = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[]{contactId}, null);
emailCur.close();
if (hasPhone.equalsIgnoreCase("1"))
hasPhone = "true";
else
hasPhone = "false";
if (Boolean.parseBoolean(hasPhone)) {
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
while (phones.moveToNext()) {
phoneNo = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phones.close();
}
pname.setText(Name);
//
phno.setText(phoneNo);
Toast.makeText(this, Name + " " + phoneNo, Toast.LENGTH_SHORT).show();
}
}
答案 1 :(得分:1)
此代码适用于手机号码联系人,不适用于电子邮件或其他内容。我发现这个代码最简单。如果有任何问题,请告诉我。
使用电话数据类型的选择意图启动活动:
findViewById(R.id.choose_contact_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent pickContact = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(pickContact, PICK_CONTACT_REQUEST);
}
});
现在设置onAcitivityResult();
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent){
switch (requestCode){
case PICK_CONTACT_REQUEST:
if (resultCode == RESULT_OK){
Uri contactUri = intent.getData();
Cursor nameCursor = getContentResolver().query(contactUri, null, null, null, null);
if (nameCursor.moveToFirst()){
String name = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
((EditText)findViewById(R.id.person_name)).setText(name);
((EditText)findViewById(R.id.enter_mobile)).setText(number);
nameCursor.close();
}
}
break;
}
}