1e41f4b71Sopenharmony_ci# Contacts Kit开发概述 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciContacts Kit可以帮助开发者轻松实现联系人的增删改查等功能。该Kit提供了一系列API,可以让开发者在应用中快速集成联系人管理功能。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci详情请参考[@ohos.contact API](../reference/apis-contacts-kit/js-apis-contact.md)。 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci 8e41f4b71Sopenharmony_ci## 能力范围 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci通过Contacts Kit,开发者可以对联系人进行管理,包括增加、删除、修改、查询联系人信息。开发者还可以通过Picker的方式,拉起联系人列表。 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci面向所有应用开放如下能力: 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci- [使用Picker选择联系人](#使用picker选择联系人) 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci面向三方应用受限开放如下能力: 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci<!--RP1--> 19e41f4b71Sopenharmony_ci> **注意:** 20e41f4b71Sopenharmony_ci> 21e41f4b71Sopenharmony_ci> 读取联系人需要声明接口调用的权限:ohos.permission.READ_CONTACTS,此权限级别为system_basic。添加联系人、删除联系人、更新联系人需要声明接口调用的权限:ohos.permission.WRITE_CONTACTS,此权限级别为system_basic。 22e41f4b71Sopenharmony_ci<!--RP1End--> 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci- [联系人管理](#联系人管理受限开放) 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_ci- [选择联系人](#选择联系人受限开放) 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci## 使用Picker选择联系人 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci当用户选择联系人的时候,通过Picker的方式,拉起联系人列表,引导用户完成界面操作,接口本身无需申请权限。 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ci1. 导入相关的联系人模块。 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci ```ts 36e41f4b71Sopenharmony_ci import { contact } from '@kit.ContactsKit'; 37e41f4b71Sopenharmony_ci import { BusinessError } from '@kit.BasicServicesKit'; 38e41f4b71Sopenharmony_ci ``` 39e41f4b71Sopenharmony_ci 40e41f4b71Sopenharmony_ci2. 调用联系人接口,拉起联系人列表,用户点击对应的联系人后返回。 41e41f4b71Sopenharmony_ci 42e41f4b71Sopenharmony_ci ```ts 43e41f4b71Sopenharmony_ci contact.selectContacts({ 44e41f4b71Sopenharmony_ci isMultiSelect:false 45e41f4b71Sopenharmony_ci },(err: BusinessError, data) => { 46e41f4b71Sopenharmony_ci if (err) { 47e41f4b71Sopenharmony_ci console.error(`selectContact callback: err->${JSON.stringify(err)}`); 48e41f4b71Sopenharmony_ci return; 49e41f4b71Sopenharmony_ci } 50e41f4b71Sopenharmony_ci console.log(`selectContact callback: success data->${JSON.stringify(data)}`); 51e41f4b71Sopenharmony_ci }); 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci ``` 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci3. 完成操作,返回想要的data数据。 56e41f4b71Sopenharmony_ci 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci## 选择联系人(受限开放) 59e41f4b71Sopenharmony_ci 60e41f4b71Sopenharmony_ci1. 声明接口调用所需要的权限。 61e41f4b71Sopenharmony_ci <!--RP2--> 62e41f4b71Sopenharmony_ci 选择联系人,调用selectContacts接口,需要配置ohos.permission.WRITE_CONTACTS权限,权限级别为system_basic。在申请权限前,请保证符合[权限使用的基本原则](../security/AccessToken/app-permission-mgmt-overview.md#权限使用的基本原则)。然后参考[申请应用权限](../security/AccessToken/determine-application-mode.md#system_basic等级应用申请权限的方式)声明对应权限。 63e41f4b71Sopenharmony_ci <!--RP2End--> 64e41f4b71Sopenharmony_ci2. 设置一个需要的Permissions数组变量。 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ci3. 执行对应联系人的权限操作。 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci ```ts 69e41f4b71Sopenharmony_ci import { common, abilityAccessCtrl, Permissions } from '@kit.AbilityKit'; 70e41f4b71Sopenharmony_ci import { contact } from '@kit.ContactsKit'; 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ci let context = getContext(this) as common.UIAbilityContext; 73e41f4b71Sopenharmony_ci const permissions: Array<Permissions> = ['ohos.permission.WRITE_CONTACTS']; 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, permissions).then(() => { 76e41f4b71Sopenharmony_ci try { 77e41f4b71Sopenharmony_ci contact.selectContacts(); 78e41f4b71Sopenharmony_ci } catch(err) { 79e41f4b71Sopenharmony_ci console.error('errCode: ' + err.code + ', errMessage: ' + err.message); 80e41f4b71Sopenharmony_ci } 81e41f4b71Sopenharmony_ci }) 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ci ``` 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci 86e41f4b71Sopenharmony_ci## 联系人管理(受限开放) 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ci若需要在应用内实现管理联系人的功能,可以使用permissions接口获取应用对联系人的编辑权限。 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci1. 声明接口调用所需要的权限。 91e41f4b71Sopenharmony_ci <!--RP2--> 92e41f4b71Sopenharmony_ci - 删除联系人,调用deleteContact接口,需要配置ohos.permission.WRITE_CONTACTS权限,权限级别为system_basic。 93e41f4b71Sopenharmony_ci - 更新联系人,调用updateContact接口,需要配置ohos.permission.WRITE_CONTACTS权限,权限级别为system_basic。 94e41f4b71Sopenharmony_ci - 查询联系人,调用queryContact接口,需要配置ohos.permission.READ_CONTACTS权限,权限级别为system_basic。 95e41f4b71Sopenharmony_ci 在申请权限前,请保证符合[权限使用的基本原则](../security/AccessToken/app-permission-mgmt-overview.md#权限使用的基本原则)。然后参考[申请应用权限](../security/AccessToken/determine-application-mode.md#system_basic等级应用申请权限的方式)声明对应权限。 96e41f4b71Sopenharmony_ci <!--RP2End--> 97e41f4b71Sopenharmony_ci 98e41f4b71Sopenharmony_ci2. 设置一个需要的Permissions数组变量。 99e41f4b71Sopenharmony_ci 100e41f4b71Sopenharmony_ci3. 执行对应联系人的权限操作。 101e41f4b71Sopenharmony_ci 102e41f4b71Sopenharmony_ci ```ts 103e41f4b71Sopenharmony_ci // 示例代码 104e41f4b71Sopenharmony_ci import { common, abilityAccessCtrl, Permissions } from '@kit.AbilityKit'; 105e41f4b71Sopenharmony_ci import { contact } from '@kit.ContactsKit'; 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci @Entry 108e41f4b71Sopenharmony_ci @Component 109e41f4b71Sopenharmony_ci struct Contact { 110e41f4b71Sopenharmony_ci addContactByPermissions() { 111e41f4b71Sopenharmony_ci let context = getContext(this) as common.UIAbilityContext; 112e41f4b71Sopenharmony_ci const permissions: Array<Permissions> = ['ohos.permission.WRITE_CONTACTS']; 113e41f4b71Sopenharmony_ci const contactInfo: contact.Contact = { 114e41f4b71Sopenharmony_ci name: { fullName: '王小明' }, 115e41f4b71Sopenharmony_ci phoneNumbers: [{ phoneNumber: '13912345678' }] 116e41f4b71Sopenharmony_ci } 117e41f4b71Sopenharmony_ci abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, permissions).then(() => { 118e41f4b71Sopenharmony_ci try { 119e41f4b71Sopenharmony_ci contact.addContact(context, contactInfo, (err, data) => { 120e41f4b71Sopenharmony_ci if (err) { 121e41f4b71Sopenharmony_ci console.log('addContact callback: err->' + JSON.stringify(err)); 122e41f4b71Sopenharmony_ci return; 123e41f4b71Sopenharmony_ci } 124e41f4b71Sopenharmony_ci console.log('addContact callback: data->' + JSON.stringify(data)); 125e41f4b71Sopenharmony_ci }) 126e41f4b71Sopenharmony_ci } catch (err) { 127e41f4b71Sopenharmony_ci console.error('errCode: ' + err.code + ', errMessage: ' + err.message); 128e41f4b71Sopenharmony_ci } 129e41f4b71Sopenharmony_ci }) 130e41f4b71Sopenharmony_ci } 131e41f4b71Sopenharmony_ci 132e41f4b71Sopenharmony_ci build() { 133e41f4b71Sopenharmony_ci Row() { 134e41f4b71Sopenharmony_ci Column() { 135e41f4b71Sopenharmony_ci Button('添加联系人') 136e41f4b71Sopenharmony_ci .onClick(() => { 137e41f4b71Sopenharmony_ci this.addContactByPermissions(); 138e41f4b71Sopenharmony_ci }) 139e41f4b71Sopenharmony_ci } 140e41f4b71Sopenharmony_ci .width('100%') 141e41f4b71Sopenharmony_ci } 142e41f4b71Sopenharmony_ci .height('100%') 143e41f4b71Sopenharmony_ci } 144e41f4b71Sopenharmony_ci } 145e41f4b71Sopenharmony_ci``` 146