uni-app plus.contacts.getAddressBook 导致app闪退

uni-app plus.contacts.getAddressBook 导致app闪退

示例代码:

plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, (addressbook) => {  
    console.log(addressbook)  
})

操作步骤:

  • 调用plus.contacts.getAddressBook 闪退

预期结果:

  • 获取通讯录

实际结果:

  • app直接闪退

bug描述:

  • plus.contacts.getAddressBook 调用app 直接闪退

| 信息类别       | 详细信息           |
|----------------|--------------------|
| 产品分类       | uniapp/App         |
| PC开发环境     | Windows            |
| PC开发环境版本 | window10           |
| HBuilderX类型  | 正式               |
| HBuilderX版本  | 3.1.4              |
| 手机系统       | Android            |
| 手机系统版本   | Android 11         |
| 手机厂商       | OPPO               |
| 手机机型       | 所有设备           |
| 页面类型       | vue                |
| 打包方式       | 离线               |
| 项目创建方式   | HBuilderX          |

更多关于uni-app plus.contacts.getAddressBook 导致app闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

同问。

更多关于uni-app plus.contacts.getAddressBook 导致app闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的权限问题导致的闪退。在Android 6.0+系统上,通讯录访问需要动态申请权限,直接调用plus.contacts.getAddressBook而没有处理权限请求会导致应用崩溃。

解决方案:

  1. 首先在manifest.json中配置通讯录权限:
{
    "permissions": {
        "Contacts": {
            "description": "访问通讯录"
        }
    }
}
  1. 调用前检查并申请权限:
// 检查权限状态
plus.android.requestPermissions(['android.permission.READ_CONTACTS'], function(result) {
    if (result.deniedAlways.length > 0 || result.deniedPresent.length > 0) {
        // 权限被拒绝
        console.log('通讯录权限被拒绝');
        return;
    }
    // 权限已授权,执行通讯录访问
    plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, (addressbook) => {  
        console.log(addressbook)  
    });
}, function(error) {
    console.log('权限申请错误:' + error);
});
回到顶部