HarmonyOS 鸿蒙Next 用Picker选择联系人 如何区别“本机无联系人”和“用户有联系人但没有选择”

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 用Picker选择联系人 如何区别“本机无联系人”和“用户有联系人但没有选择”

我使用Picker选取联系人信息,现在遇到这样一个问题:

使用contact.selectContacts方法选取联系人。 此方法返回值不能区分“用户取消选择”、“设备上没有联系人”两种情况。

举例,此方法签名:function selectContacts(options: ContactSelectionOptions, callback: AsyncCallback<Array<Contact>>): void;

① 当设备上没有联系人信息时,调用此方法,会马上得到一个长度为0的Array<Contact>,且不会拉起Picker对话框。

② 当设备上有联系人且拉起Picker选择框后,如果用户点击取消(或back返回),也会得到一个长度为0的Array<Contact>。

所以说,我拿到这个长度为0的Array<Contact>后,怎么判断到底是用户机器上没有联系人信息,还是用户机器上有联系人信息但放弃了选择?

或者有没有其他办法可以区分这两种场景?

注:我监听不到这个Picker对话框是否已弹出,这应该是系统级的对话框。


更多关于HarmonyOS 鸿蒙Next 用Picker选择联系人 如何区别“本机无联系人”和“用户有联系人但没有选择”的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

该接口返回的是你选择的联系人数组,不管你是因为没有联系人,或者是你取消了没有选择联系人,最终结果都是选择了0个联系人,所以返回空数组。 感觉不需要区分这个吧,也没有方法区分。

如果你想要判断本地是否有这个联系人,需要调用其他的API获取

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-contact-V13#contactquerycontactsbyphonenumber10-2

需要权限:ohos.permission.READ_CONTACTS

注意:

当前能力受限开放,需要申请受限开放权限ohos.permission.READ_CONTACTS或ohos.permission.WRITE_CONTACTS。该权限通常不允许三方应用申请,仅符合指定场景的应用可申请该权限。

申请方式请参考:申请使用受限权限

更多关于HarmonyOS 鸿蒙Next 用Picker选择联系人 如何区别“本机无联系人”和“用户有联系人但没有选择”的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,当使用Picker组件选择联系人时,为了区分“本机无联系人”和“用户有联系人但没有选择”的两种情况,可以采取以下策略:

  1. 获取联系人列表长度:在Picker组件调用选择联系人之前,先通过系统API获取当前设备的联系人列表长度。如果长度为0,则直接判断为“本机无联系人”。

  2. Picker选择回调:当用户通过Picker选择联系人后,系统会触发相应的回调。在回调中,检查返回的联系人数据。如果返回的数据为空(即用户未选择任何联系人),则判断为“用户有联系人但没有选择”。

  3. 状态标记:在业务逻辑中,可以使用一个状态变量来标记用户是否进行了选择操作。如果Picker被打开但未选择任何联系人,状态变量保持未选择状态;如果Picker被打开且选择了联系人,则更新状态变量。

通过上述方法,可以有效区分“本机无联系人”和“用户有联系人但没有选择”的两种情况。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部