uni-app 华为手机保存电话号到通讯录异常
uni-app 华为手机保存电话号到通讯录异常
产品分类
uniapp/App
开发环境信息
项 | 详情 |
---|---|
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | Windows 10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.8.4 |
手机系统 | 全部 |
手机厂商 | 华为 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
测试过的手机
华为手机 鸿蒙3.0
示例代码
uni.addPhoneContact({
firstName: item.name,
mobilePhoneNumber: item.phone,
success: function() {
console.log('success');
uni.showToast({
title: '保存成功',
icon: 'none',
duration: 1000
})
},
fail: function() {
console.log('fail');
uni.showToast({
title: '保存失败',
icon: 'none',
duration: 1000
})
}
});
操作步骤
调用 uni.addPhoneContact
添加通讯录联系人
预期结果
可以正常保存访问
实际结果
可以导入到通讯录,但是一打开导入的手机号详情就会立即返回,并自动删除导入的联系人信息。
bug描述
华为手机使用 uni.addPhoneContact
保存电话号码到通讯录异常
4 回复
博主该问题是否解决,我这也是发布部分华为手机出现同样的问题
华为pure 70,鸿蒙4.2 ,也是一样,正常保存到通讯录,然后点击联系人就自动消失
有人解决了吗,我这边也遇到了,目前排查是畅联的问题,卸载后添加就正常
在处理uni-app在华为手机上保存电话号码到通讯录的异常问题时,通常涉及到访问设备通讯录权限、使用正确的API以及处理不同设备间的兼容性问题。以下是一个基本的代码示例,展示了如何在uni-app中实现保存联系人功能,并附带一些可能的调试思路。
代码示例
首先,确保在manifest.json
中配置了必要的权限:
"mp-weixin": { // 示例平台,针对华为需配置对应的Android平台
"requiredPrivateInfos": ["addPhoneContact"]
},
"plus": {
"distribute": {
"android": {
"permissions": [
"android.permission.READ_CONTACTS",
"android.permission.WRITE_CONTACTS"
]
}
}
}
在页面中实现保存联系人的功能:
// 请求权限
function requestPermissions() {
return new Promise((resolve, reject) => {
plus.android.requestPermissions(['android.permission.READ_CONTACTS', 'android.permission.WRITE_CONTACTS'], (event) => {
if (event.deniedAlways.length === 0 && event.denied.length === 0) {
resolve();
} else {
reject('Permission denied');
}
});
});
}
// 保存联系人
async function saveContact(name, phoneNumber) {
try {
await requestPermissions();
const Contact = plus.android.importClass('android.provider.ContactsContract$Contacts');
const RawContacts = plus.android.importClass('android.provider.ContactsContract$RawContacts');
const ContentValues = plus.android.importClass('android.content.ContentValues');
const ContentUris = plus.android.importClass('android.content.ContentUris');
const context = plus.android.runtimeMainActivity();
const contentResolver = context.getContentResolver();
// 插入RawContact
const rawContactUri = contentResolver.insert(RawContacts.CONTENT_URI, new ContentValues());
const contactId = ContentUris.parseId(rawContactUri);
// 插入联系人数据
const values = new ContentValues();
values.put(Contact.DISPLAY_NAME, name);
values.put(Contact.HAS_PHONE_NUMBER, true);
contentResolver.update(Contact.CONTENT_URI, values, Contact._ID + "=?", [contactId]);
// 插入电话号码
const phoneValues = new ContentValues();
phoneValues.put('number', phoneNumber);
phoneValues.put('type', plus.android.importClass('android.provider.ContactsContract$CommonDataKinds$Phone').TYPE_MOBILE);
contentResolver.insert(plus.android.importClass('android.provider.ContactsContract$Data').CONTENT_URI, phoneValues);
uni.showToast({
title: 'Contact saved successfully',
icon: 'success'
});
} catch (error) {
console.error('Error saving contact:', error);
uni.showToast({
title: 'Failed to save contact',
icon: 'none'
});
}
}
// 调用保存联系人函数
saveContact('John Doe', '1234567890');
调试思路
- 权限检查:确保应用已获得读写联系人权限。
- API兼容性:检查
ContentUris
、ContentValues
等API在不同Android版本上的行为是否一致。 - 设备日志:查看华为手机的系统日志,寻找可能的异常信息。
- 模拟器与真机测试:在模拟器上测试通过后,务必在真机上进行全面测试,因为真机环境可能包含更多不可预见的因素。
通过上述代码和调试思路,可以帮助你定位并解决在华为手机上保存联系人时遇到的问题。