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