【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位,中间没有空格,座机号不显示等等,则你需要对你获取到的手机号进行另外的处理之后在存

 

你可能感兴趣的:(Uniapp,安卓,uniapp)