HarmonyOS 如何保存电话号码到通讯录,按照官方的api一直报权限错误?

代码如下:

//添加联系人
public static async addContact(ehomeContact: ContactUser) {
  let context = getContext() as common.UIAbilityContext;
  const permissions: Array<Permissions> = ['ohos.permission.WRITE_CONTACTS'];
  const contactInfo: contact.Contact = {
    name: { fullName: ehomeContact.name || "" },
    phoneNumbers: [{ phoneNumber: ehomeContact.phone || "" }, { phoneNumber: ehomeContact.tel || "" }],
    emails: [{ email: ehomeContact.email || "" }],
  }
  abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, permissions).then(() => {
    try {
      contact.addContact(context, contactInfo, (err, data) => {
        if (err) {
          console.log('addContact callback: err->' + JSON.stringify(err));
          return;
        }
        console.log('addContact callback: data->' + JSON.stringify(data));
      })
    } catch (err) {
      console.error('errCode: ' + err.code + ', errMessage: ' + err.message);
    }
  })
}
阅读 547
1 个回答

module.json5配置了ohos.permission.READ\_CONTACTS,ohos.permission.WRITE\_CONTACTS,

受限权限开发场景参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/restricted-permissions-V5\#section09041234151715

示例参考:

import { BusinessError } from '@kit.BasicServicesKit';
import { contact } from '@kit.ContactsKit';
import { promptAction } from '@kit.ArkUI';
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  onConcatBtnClick() {
    // 获取context
    let context = getContext(this) as common.UIAbilityContext;
    const permissions: Array<Permissions> = ['ohos.permission.WRITE_CONTACTS'];

    const contactInfo: contact.Contact = {
      name: { fullName: '张先生' },
      phoneNumbers: [{ phoneNumber: '电话号码' }],
      emails: [{ email: '邮箱' }],
      websites: [{ website: '网络链接' }],
      note: { noteContent: '一些备注的信息' },
      nickName: { nickName: '小张' },
      portrait: { uri: 'xxx' },
      imAddresses: [
        {
          imAddress: "测试地址",
          labelName: "CUSTOM_LABEL"
        }
      ],
      events: [{ eventDate: "2000.08.20", labelName: 'EVENT_BIRTHDAY' }]
    }

    abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, permissions).then(() => {
      try {
        contact.addContact(
          context,
          contactInfo, (err: BusinessError, data) => {
          if (err) {
            console.log(`addContact callback: err->${JSON.stringify(err)}`);
            return;
          }
          console.log(`addContact callback: success data->${JSON.stringify(data)}`);
        });
      } catch (err) {
        console.error('errCode: ' + err.code + ', errMessage: ' + err.message);
      }
    })
  }

  build() {
    Column() {
      Button('点击').onClick(() => {
        this.onConcatBtnClick()
        promptAction.showToast({ message: `方法已执行` })
      })
    }
    .width("100%")
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }
}

跳转通讯录,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-ability-55-V5

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进