android 应用组件[通用 Intent---联系人/人员应用] 九

选择联系人

如需让用户选择联系人和为您的应用提供对所有联系人信息的访问权限,请使用 ACTION_PICK 操作,并将 MIME 类型指定为 Contacts.CONTENT_TYPE

传送至您的 onActivityResult() 回调的结果 Intent 包含指向所选联系人的 content: URI。响应会利用 Contacts Provider API 为您的应用授予该联系人的临时读取权限,即使您的应用不具备 READ_CONTACTS 权限也没有关系。

提示:如果您只需要访问某一条联系人信息(如电话号码或电子邮件地址),请改为参见下一节的内容,其中介绍了如何选择特定联系人数据

操作
ACTION_PICK
数据 URI 架构
MIME 类型
Contacts.CONTENT_TYPE

示例 Intent:

static final int REQUEST_SELECT_CONTACT = 1;

public void selectContact() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        Uri contactUri = data.getData();
        // Do something with the selected contact at contactUri
        ...
    }
}

如需了解有关在获得联系人 URI 后如何检索联系人详情的信息,请阅读检索联系人详情。 请谨记,使用以上 Intent 检索联系人 URI 时,读取该联系人的详情并不需要 READ_CONTACTS 权限。

选择特定联系人数据

如需让用户选择某一条联系人信息,如电话号码、电子邮件地址或其他数据类型,请使用ACTION_PICK 操作,并将 MIME 类型指定为下列其中一个内容类型(如 CommonDataKinds.Phone.CONTENT_TYPE),以获取联系人的电话号码。

如果您只需要检索一种类型的联系人数据,则将此方法与来自 ContactsContract.CommonDataKinds 类的 CONTENT_TYPE 配合使用要比使用Contacts.CONTENT_TYPE(如上一部分中所示)更高效,因为结果可让您直接访问所需数据,无需对联系人提供程序执行更复杂的查询。

传送至您的 onActivityResult() 回调的结果 Intent 包含指向所选联系人数据的 content: URI。响应会为您的应用授予该联系人数据的临时读取权限,即使您的应用不具备 READ_CONTACTS 权限也没有关系。

操作
ACTION_PICK
数据 URI 架构
MIME 类型
CommonDataKinds.Phone.CONTENT_TYPE
从有电话号码的联系人中选取。
CommonDataKinds.Email.CONTENT_TYPE
从有电子邮件地址的联系人中选取。
CommonDataKinds.StructuredPostal.CONTENT_TYPE
从有邮政地址的联系人中选取。

或者 ContactsContract 下众多其他 CONTENT_TYPE 值中的一个。

示例 Intent:

static final int REQUEST_SELECT_PHONE_NUMBER = 1;

public void selectContact() {
    // Start an activity for the user to pick a phone number from contacts
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) {
        // Get the URI and query the content provider for the phone number
        Uri contactUri = data.getData();
        String[] projection = new String[]{CommonDataKinds.Phone.NUMBER};
        Cursor cursor = getContentResolver().query(contactUri, projection,
                null, null, null);
        // If the cursor returned is valid, get the phone number
        if (cursor != null && cursor.moveToFirst()) {
            int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(numberIndex);
            // Do something with the phone number
            ...
        }
    }
}

查看联系人

如需显示已知联系人的详情,请使用 ACTION_VIEW 操作,并使用 content: URI 作为 Intent 数据指定联系人。

初次检索联系人 URI 的方法主要有两种:

操作
ACTION_VIEW
数据 URI 架构
content:<URI>
MIME 类型
无。该类型是从联系人 URI 推断得出。

示例 Intent:

public void viewContact(Uri contactUri) {
    Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

编辑现有联系人

如需编辑已知联系人,请使用 ACTION_EDIT 操作,使用 content: URI 作为 Intent 数据指定联系人,并将 extra 中由常量指定的任何已知联系人信息包括在ContactsContract.Intents.Insert 中。

初次检索联系人 URI 的方法主要有两种:

操作
ACTION_EDIT
数据 URI 架构
content:<URI>
MIME 类型
该类型是从联系人 URI 推断得出。
Extra
ContactsContract.Intents.Insert 中定义的一个或多个 extra,以便您填充联系人详情字段。

示例 Intent:

public void editContact(Uri contactUri, String email) {
    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setData(contactUri);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

如需了解有关如何编辑联系人的详细信息,请阅读使用 Intent 修改联系人

插入联系人

如需插入新联系人,请使用 ACTION_INSERT 操作,将 Contacts.CONTENT_TYPE 指定为 MIME 类型,并将 extra 中由常量指定的任何已知联系人信息包括在ContactsContract.Intents.Insert 中。

操作
ACTION_INSERT
数据 URI 架构
MIME 类型
Contacts.CONTENT_TYPE
Extra
ContactsContract.Intents.Insert 中定义的一个或多个 extra。

示例 Intent:

public void insertContact(String name, String email) {
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setType(Contacts.CONTENT_TYPE);
    intent.putExtra(Intents.Insert.NAME, name);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

如需了解有关如何插入联系人的详细信息,请阅读 使用 Intent 修改联系人
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值