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 回复
这是一个典型的权限问题导致的闪退。在Android 6.0+系统上,通讯录访问需要动态申请权限,直接调用plus.contacts.getAddressBook
而没有处理权限请求会导致应用崩溃。
解决方案:
- 首先在manifest.json中配置通讯录权限:
{
"permissions": {
"Contacts": {
"description": "访问通讯录"
}
}
}
- 调用前检查并申请权限:
// 检查权限状态
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);
});