HarmonyOS鸿蒙Next中如何实现联系人管理功能,例如选择联系人,增加删除联系人,根据号码查询联系人等功能

HarmonyOS鸿蒙Next中如何实现联系人管理功能,例如选择联系人,增加删除联系人,根据号码查询联系人等功能 如何实现联系人管理功能,例如选择联系人,增加删除联系人,根据号码查询联系人等功能

3 回复
import { common, abilityAccessCtrl, Permissions, PermissionRequestResult } from '@kit.AbilityKit';
import { contact } from '@kit.ContactsKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { PromptAction } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
  @State contact: string = '';
  promptAction: PromptAction = this.getUIContext().getPromptAction();

  aboutToAppear(): void {
    let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
    const permissions: Array<Permissions> = ['ohos.permission.WRITE_CONTACTS', 'ohos.permission.READ_CONTACTS'];
    abilityAccessCtrl.createAtManager()
      .requestPermissionsFromUser(context, permissions)
      .then((data: PermissionRequestResult) => {
        console.info(`data: ${JSON.stringify(data)}`);
        console.info(`data permissions: ${data.permissions}`);
        console.info(`data authResults: ${data.authResults}`);
        console.info(`data dialogShownResults: ${data.dialogShownResults}`);
      })
      .catch((err: BusinessError) => {
        console.error('data:' + JSON.stringify(err));
      });
  }

  selectByPicker(): Promise<contact.Contact[]> {
    return contact.selectContacts();
  }

  addContacts() {
    // 自定义构建联系人对象类
    const contactInfo: contact.Contact = {
      name: { fullName: 'xxx' },
      phoneNumbers: [{ phoneNumber: '13xxxxxxxxx' }]
    };
    try {
      contact.addContact(this.context, contactInfo, (err, data) => { // 调用接口增加联系人
        if (err) {
          console.error(`addContact callback, errCode: ${err.code}, errMessage: ${err.message}`);
          return;
        }
        console.info(`addContact callback, data->${JSON.stringify(data)}`);
      });
      this.promptAction.showToast({
        message: '添加成功',
        duration: 2000
      });
    } catch (err) {
      console.error(`errCode: ${err.code}, errMessage: ${err.message}`);
    }
  }

  async deleteContacts() {
    let contacts = await this.selectByPicker(); // 返回Picker选择的联系人对象。
    contact.deleteContact(this.context, contacts[0].key, (err: BusinessError) => { // 调用接口删除联系人
      if (err) {
        console.error(`Failed to delete Contact. Code: ${err.code}, message: ${err.message}`);
        return;
      }
      console.info('Succeeded in deleting Contact.');
      this.promptAction.showToast({
        message: '删除成功',
        duration: 2000
      });
    });
  }

  queryContacts() {
    contact.queryContactsByPhoneNumber(this.context, '13xxxxxxxxx', (err: BusinessError, data) => { // 调用接口根据号码查询联系人key
      if (err) {
        console.error(`Failed to query Contacts By PhoneNumber. Code: ${err.code}, message: ${err.message}`);
        return;
      }
      contact.queryContact(this.context, data[0].key, (err: BusinessError, data) => { // 调用接口根据key查询联系人信息
        if (err) {
          console.error(`Failed to query Contact. Code: ${err.code}, message: ${err.message}`);
          return;
        }
        console.info(`Succeeded in querying Contact. data->${JSON.stringify(data)}`);
        this.contact = JSON.stringify(data);
        this.promptAction.showToast({
          message: '查询成功',
          duration: 2000
        });
      });
      console.info(`Succeeded in querying Contacts By PhoneNumber. data->${JSON.stringify(data)}`);
    });
  }

  build() {
    Column() {
      Button('使用Picker拉起联系人')
        .onClick(() => {
          this.selectByPicker();
        })
        .fontSize(23)
        .margin({ bottom: 5 });
      Button('添加联系人')
        .onClick(() => {
          this.addContacts();
        })
        .fontSize(23)
        .margin({ bottom: 5 });
      Button('删除联系人')
        .onClick(() => {
          this.deleteContacts();
        })
        .fontSize(23)
        .margin({ bottom: 5 });
      Button('根据号码查询联系人')
        .onClick(() => {
          this.queryContacts();
        })
        .fontSize(23)
        .margin({ bottom: 5 });
      Text(this.contact);
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center);
  }
}

参考地址

https://developer.huawei.com/consumer/cn/doc/architecture-guides/socialcontact-v1_2-ts_30-0000002401140837

更多关于HarmonyOS鸿蒙Next中如何实现联系人管理功能,例如选择联系人,增加删除联系人,根据号码查询联系人等功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,联系人管理功能通过@ohos.contact接口实现。选择联系人使用contact.selectContact()方法;添加联系人调用contact.addContact()并传入Contact对象;删除联系人使用contact.deleteContact()指定联系人ID;根据号码查询通过contact.queryContactsByPhoneNumber()传入号码参数。这些接口直接操作系统联系人数据库,无需依赖Java或C语言组件。

在HarmonyOS Next中实现联系人管理功能,主要通过以下步骤:

  1. 权限申请:在module.json5中声明ohos.permission.READ_CONTACTSohos.permission.WRITE_CONTACTS权限,确保应用具备访问和修改联系人数据的权限。

  2. 联系人数据操作

    • 查询联系人:使用contact模块的queryContacts方法,通过指定条件(如号码)获取联系人列表。
    • 添加联系人:通过addContact方法,构建联系人数据(如姓名、电话号码)并插入到设备联系人数据库。
    • 删除联系人:调用deleteContact方法,根据联系人ID执行删除操作。
  3. 联系人选择界面:利用picker组件或系统提供的联系人选择器(如ContactPicker),让用户从列表中选择联系人。

  4. 数据同步与UI更新:操作完成后,使用数据管理机制(如分布式数据对象)或事件通知更新界面,确保数据一致性。

示例代码片段(查询联系人):

import contact from '@ohos.contact';

let key = 'phoneNumber';
let value = '138****1234';
contact.queryContacts(key, value, (err, data) => {
  if (!err) {
    console.log('查询结果:', data);
  } else {
    console.error('查询失败:', err);
  }
});

注意处理异步回调与错误,确保用户体验流畅。

回到顶部