Android呼び出しシステムのアドレス帳は、連絡先の名前と番号(同じ連絡先の複数の番号を含む)を取得します.

2461 ワード

まず、次のコードを使用してシステムのアドレス帳を起動します.
 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("");
    }