Android读取联系人信息和选择联系人信息

本博客展示了如何使用Android的ContentResolver查询联系人信息,并通过按钮点击事件实现读取和选择联系人的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MyContentProvider extends ActionBarActivity {
    private final int REQUEST_CONTACT = 1;
    private int DIALOG = 0;
    private String contactId,contactName;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_content_provider);
        Button bt = (Button) findViewById(R.id.buttonRead);
        Button btSelect = (Button) findViewById(R.id.buttonSelect);
        View.OnClickListener ocl = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (v.getId())
                {
                    case R.id.buttonRead:
                        //读取联系人信息
                        readContact();
                        break;
                    case R.id.buttonSelect:
                        //打开通信录并返回选择的联系人信息
                        selectContact();
                        break;
                }

            }
        };
        bt.setOnClickListener(ocl);
        btSelect.setOnClickListener(ocl);
    }


    private void readContact(){
        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);
        if(cursor.moveToFirst()){
            int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);
            int displayNameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
            do{
                String contactId = cursor.getString(idColumn);
                String displayName = cursor.getString(displayNameColumn);
                Toast.makeText(MyContentProvider.this, "联系人姓名:"+ displayName,Toast.LENGTH_LONG).show();
                int phoneCount = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                if(phoneCount > 0){
                    Cursor phoneCursor =  getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="+contactId,null,null);
                    if(phoneCursor.moveToFirst()){
                        do{
                            String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            Toast.makeText(MyContentProvider.this,"联系人电话:"+phoneNumber,Toast.LENGTH_SHORT).show();
                        }while(phoneCursor.moveToNext());
                    }
                }
            }while (cursor.moveToNext());
        }

    }

    private void selectContact(){
        //打开通信录
        Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(intent,REQUEST_CONTACT);
    }

    @Override
    //处理返回通信结果
    protected void onActivityResult(int requestCode,int resultCode,Intent data){
       //判断请求码
        if(requestCode == REQUEST_CONTACT){
            if(resultCode == RESULT_OK){
                if(data == null) return;
                //获取返回的数据
                Uri result = data.getData();
                contactId = result.getLastPathSegment();
                contactName = getPhoneContacts(contactId);
                showDialog(DIALOG);
            }
        }
    }
    //获取联系人名称
    private String getPhoneContacts(String contactId){
        Cursor cursor = null;
        //联系人Uri
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        String name = "";
        try{
            //查询联系人
            cursor = getContentResolver().query(uri,null,ContactsContract.Contacts._ID + "="+contactId,null,null);
            if(cursor.moveToFirst()){
                name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            }
        }catch(Exception e){
            name = "";
            e.printStackTrace();

        }finally {
            if(cursor != null){
                cursor.close();
            }
        }
        return name;
    }

    protected Dialog onCreateDialog(int id){
        if(id == 0){
            String message = "";
            if(contactName != null && !contactName.equals("")){
                message = contactName + "is selected?";
            }else{
                message = "Did not select any contact.";
            }
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(message)
                    .setCancelable(false)
                    .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                           // finish();
                        }
                    })
                    .setNegativeButton("No",new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
            return builder.create();
        }else {
            return null;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值