【uniapp】 读取手机通讯录权限

现在很多APP,市场需求都需要读取我们手机上的相关权限,例如WX要读取通讯录,相册,照相机等权限,其他APP亦如此

但是在获得这些权限之前我们首先需要征得用户的统一之后才能读取

官方讲解:

https://www.html5plus.org/doc/zh_cn/contacts.html

 



                        /*
			 * 权限设置
			 */
                var platform = uni.getSystemInfoSync().platform
			onAddressBookSetting: function() {
				if (this.isShow) {
					return
				}
				this.isShow = true
				uni.showModal({
					title: '提示',
					content: 'APP通讯录权限没有开启,是否开启?',
					success(res) {
						if (res.confirm) {
							if (platform == 'ios') {
								var UIApplication = plus.ios.import("UIApplication");
								var NSURL2 = plus.ios.import("NSURL");
								var setting2 = NSURL2.URLWithString("app-settings:");
								var application2 = UIApplication.sharedApplication();
								application2.openURL(setting2);
								plus.ios.deleteObject(setting2);
								plus.ios.deleteObject(NSURL2);
								plus.ios.deleteObject(application2);
							} else {
								var main = plus.android.runtimeMainActivity();
								var bulid = plus.android.importClass("android.os.Build");
								var Intent = plus.android.importClass('android.content.Intent');
								if (bulid.VERSION.SDK_INT >= 9) {
									var intent = new Intent('android.settings.APPLICATION_DETAILS_SETTINGS');
									var Uri = plus.android.importClass('android.net.Uri');
									var uri = Uri.fromParts("package", main.getPackageName(), null)
									intent.setData(uri);
									intent.putExtra('android.content.Intent.setFlags', Intent.FLAG_ACTIVITY_NEW_TASK);
								} else if (bulid.VERSION.SDK_INT <= 8) {
									var intent = new Intent(Intent.ACTION_VIEW);
									intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
									intent.putExtra("com.android.settings.ApplicationPkgName", main.getPackageName());
									intent.putExtra('android.content.Intent.setFlags', Intent.FLAG_ACTIVITY_NEW_TASK);
								}
								main.startActivity(intent);
								this.isShow = false
							}
						} else {
							uni.navigateBack({
								delta: 1
							})
						}
					}
				})
			},

 读取手机通讯录相关数据

注意:phoneNumbers 是一个数组,可以console一下,只取自己所需要的的数据,避免数据量过大导致读取数据然后现在在手机上耗时缓慢;

对于数据量过大的操作,可以设置一个一个时间段内的缓存,这样既保证了用户访问APP是可以快速显示,有保证了通讯录数据的较及时更新性

/* 
			 * 初始化通讯录
			 */
			initContacts: function() {
				//获取手机通讯录
				plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, (addressbook) => {
                    addressbook.find(["displayName", "phoneNumbers"], (contacts) => {
						let temp = [];
						contacts.forEach((item) => {
							let FirstE = this._parseChar(item.displayName);
							let unicode = FirstE.charCodeAt();
							let index = parseInt(unicode - 65);
							let text = item.displayName.slice(0, 1)
							item.phoneNumbers.forEach(item_phone => {
								item_phone.value = this.GetMobile(item_phone.value)
								this.IsInvitedFun(item_phone.value);
								let contact = {
									'text': text,
									'name': item.displayName,
									'phone': item_phone.value,
								}
								temp = this.dataArr[index].Arr == undefined ? [] : this.dataArr[index].Arr;
								
								let string=JSON.stringify(temp);
								if (string.indexOf(item_phone.value) == -1) {
									temp.push(contact);
								}
								this.dataArr[index].Arr = temp;
							});
						});
						this.contactItems = JSON.parse(JSON.stringify(this.dataArr))
					}
					}, (e) => {
						this.onAddressBookSetting()
					});
				}, (e) => {
					this.onAddressBookSetting()
				});
			},

 其他tip :每一个人的存储电话的方式都不一样手机型号不一样,所以可能很多手机号码都不规范,比如手机号码中有很多空格,手机号码之前有+86,如果你对手机号码的格式要求不严,则不需要另外去处理,但是如果你对手机号码的格式要求比较严格,只能有11位,中间没有空格,座机号不显示等等,则你需要对你获取到的手机号进行另外的处理之后在存

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值