手机充值跳转到通讯录的不同数据展示方式及数据回调

本文探讨华为手机在使用不同ContactsContract类型进行手机充值操作时,如何跳转到通讯录并影响数据显示。当使用ContactsContract.Contacts.CONTENT_TYPE,通讯录呈现的数据与使用"vnd.android.cursor.dir/phone"类型时存在差异。详细解析两种方式下的通讯录页面内容与数据回调机制。

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

华为手机测试的时候发现设置的type不同,通讯录显示的页面数据也不同。

1.使用ContactsContract.Contacts.CONTENT_TYPE类型时:

Intent i = new Intent(Intent.ACTION_PICK);
i.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(i, 0);

2.使用ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE类型时:

Intent i = new Intent(Intent.ACTION_PICK);
i.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(i, 0);

3.使用"vnd.android.cursor.dir/phone"类型时:

Intent i = new Intent(Intent.ACTION_PICK);
i.setType("vnd.android.cursor.dir/phone");
startActivityForResult(i, 0);

根据需求不同显示的数据不同,回调数据解析的方式也不同,下面给出两种解析方式(只查询了手机号和姓名):

1.第一种方式

   /**
     * 从通讯录回调的结果显示
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
            if (data != null) {
                Uri uri = data.getData();
               if (uri != null) {
                      Cursor cursor = getContentResolver()
                              .query(uri, new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME },
                                            null, null, null);
                   while (cursor.moveToNext()) {
                       String number = cursor.getString(0);
                       String phoneNum = number.replaceAll("-", "");
                       etPhone.setText(phoneNum);
                       etPhone.setSelection(phoneNum.length());
                       String name = cursor.getString(1);
                            }
                   cursor.close();
                       }
              }

         }
2.第二种方式

    /**
     * 从通讯录回调的结果显示
     * @param requestCode
     * @param resultCode
     * @param data
     */
    protected void onActivityResult (int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
            case 0:
                if (data == null) {
                    return;
                }
                Uri uri = data.getData();
                //得到ContentResolver对象
                ContentResolver cr = getContentResolver();
                //取得电话本中开始一项的光标
                Cursor cursor=cr.query(uri,null,null,null,null);
                if(cursor!=null)
                {
                    cursor.moveToFirst();
                    //取得电话号码
                    String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                    Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
                    if(phone != null){
                        phone.moveToFirst();
                        String phoneNum = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        etPhone.setText(phoneNum);
                        etPhone.setSelection(phoneNum.length());
                    }
                    phone.close();
                    cursor.close();
                }
                break;

            default:
                break;
        }
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值