Android呼び出しシステムのアドレス帳は、連絡先の名前と番号(同じ連絡先の複数の番号を含む)を取得します.
2461 ワード
まず、次のコードを使用してシステムのアドレス帳を起動します.
Intentでは
次にコードを見てみましょう.
Intent intent=new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent,1000);
Intentでは
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
の値を入力し、連絡先を表示する電話番号リストを表し、同じ名前の下に複数の番号が表示されています.1、ContactsContract.Contacts.CONTENT_URI
は連絡先リストを表示しますが、番号は表示されません.そのため、この値を伝えると、1つの名前の下に複数の番号があれば、onActivityResult()
の方法で自分ですべての番号を取る必要があります.2、StructuredPostal.CONTENT_URI
元の連絡先の郵便住所のリストを表示します.3、Email.CONTENT_URI
元の連絡先の電子メールアドレスのリストが表示されます.次にコードを見てみましょう.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==1000){
if (resultCode==RESULT_OK){
if (data!=null){
Uri uri=data.getData();
String[] contact=getPhoneContacts(uri);
if (contact!=null){
String name=contact[0];//
String number=contact[1];//
}
}
}
}
}
/**
*
* @param uri
*/
private String[] getPhoneContacts(Uri uri){
String[] contact = new String[2];
// ContentResolver
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(uri, null, null, null, null);
if (cursor != null&&cursor.moveToFirst()) {
//
int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
contact[0] = cursor.getString(nameFieldColumnIndex);
contact[1]=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.i("contacts",contact[0]);
Log.i("contactsUsername",contact[1]);
cursor.close();
} else {
return null;
}
return contact;
}
/**
*
*
* @param phoneNum
* @return
*/
private String formatPhoneNum(String phoneNum) {
String regex = "(\\+86)|[^0-9]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(phoneNum);
return matcher.replaceAll("");
}