uniapp获取当前位置及检测授权状态

uniapp获取当前位置及检测授权定位权限

文章目录

    • uniapp获取当前位置及检测授权定位权限
      • 效果图
      • 创建js文件
        • permission.js
        • location.js
      • 使用


效果图

Android设备

在这里插入图片描述

  • 点击 “设置”,跳转应用信息,打开“权限即可”;

在这里插入图片描述


创建js文件

permission.js
  • 新建 .js 文件,例: permission.js
  • 管理相关权限,例相册、相机等,可以写在此文件中
  • 根据不同平台,处理向系统请求权限
/// null = 未请求,1 = 已允许,0 = 拒绝|受限, 2 = 系统未开启var isIOSfunction location() {var result = 0;var cllocationManger = plus.ios.import("CLLocationManager");var enable = cllocationManger.locationServicesEnabled();var status = cllocationManger.authorizationStatus();if (!enable) {result = 2;} else if (status === 0) {result = null;} else if (status === 3 || status === 4) {result = 1;} else {result = 0;}plus.ios.deleteObject(cllocationManger);return result;
}function requestIOS(permissionID) {return new Promise((resolve, reject) => {switch (permissionID) {case "location":resolve(location());break;default:resolve(0);break;}});
}function requestAndroid(permissionID) {return new Promise((resolve, reject) => {plus.android.requestPermissions([permissionID],function(resultObj) {var result = 0;for (var i = 0; i < resultObj.granted.length; i++) {var grantedPermission = resultObj.granted[i];console.log('已获取的权限:');result = 1}for (var i = 0; i < resultObj.deniedPresent.length; i++) {var deniedPresentPermission = resultObj.deniedPresent[i];console.log('拒绝本次申请的权限:');result = 0}for (var i = 0; i < resultObj.deniedAlways.length; i++) {var deniedAlwaysPermission = resultObj.deniedAlways[i];console.log('永久拒绝申请的权限:');result = -1}resolve(result);},function(error) {resolve({code: error.code,message: error.message});});});
}function gotoAppPermissionSetting() {if (permission.isIOS) {var UIApplication = plus.ios.import("UIApplication");var application2 = UIApplication.sharedApplication();var NSURL2 = plus.ios.import("NSURL");var setting2 = NSURL2.URLWithString("app-settings:");application2.openURL(setting2);plus.ios.deleteObject(setting2);plus.ios.deleteObject(NSURL2);plus.ios.deleteObject(application2);} else {var Intent = plus.android.importClass("android.content.Intent");var Settings = plus.android.importClass("android.provider.Settings");var Uri = plus.android.importClass("android.net.Uri");var mainActivity = plus.android.runtimeMainActivity();var intent = new Intent();intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);intent.setData(uri);mainActivity.startActivity(intent);}
}const permission = {get isIOS(){return typeof isIOS === 'boolean' ? isIOS : (isIOS = uni.getSystemInfoSync().platform === 'ios')},requestIOS: requestIOS,requestAndroid: requestAndroid,gotoAppSetting: gotoAppPermissionSetting
}export default permission

location.js
  • 检测当前权限
  • 获取当前位置
  • 拒绝授权,弹窗提示
  • 跳转App应用设置,打开位置权限
import permision from '@/common/js/permission.js'
import store from '@/store/index.js'export async function getLocation(cb) {// #ifdef APP-PLUSlet status = await checkPermission();if (status !== 1) {return status;}// #endifif (typeof cb == 'function') cb && typeof cb == 'function' && cb(status)doGetLocation();
}/*** 获取当前位置信息*/
export const doGetLocation = () => {uni.getLocation({success: (res) => {// 根据个人所需处理store.commit('SET_LOCATION', {lng: res.longitude,lat: res.latitude});console.log('当前位置:', res.longitude, res.latitude);},fail: (err) => {if (err.errMsg.indexOf("auth deny") >= 0) {uni.showToast({title: "访问位置被拒绝",icon: 'none'})} else {uni.showToast({title: err.errMsg,icon: 'none'})}}})
}/*** 检测定位权限*/
async function checkPermission() {let status = permision.isIOS ? await permision.requestIOS('location') :await permision.requestAndroid('android.permission.ACCESS_FINE_LOCATION');if (status === null || status === 1) {status = 1;} else if (status === 2) {uni.showModal({content: "系统定位已关闭",showCancel: false,success: function(res) {}})} else if (status.code) {uni.showModal({content: status.message})} else {uni.showModal({content: "为了您更好的体验App蓝牙功能,需要获取位置信息,请点击设置开启定位权限",confirmText: "设置",success: function(res) {if (res.confirm) {permision.gotoAppSetting();}}})}return status;
}const location = {getLocation
}
export default location;

使用

<button type="primary" @click="getLocation">获取位置</button>

import location from '@/common/js/location.js'/*** 获取位置*/
getLocation() {location.getLocation();
}

  • 回调
location.getLocation((res) => {if (res != 1) return;// xxx
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3d合并的模型为什么没有模型---模大狮模型网

在3D建模中&#xff0c;合并模型是常见的操作&#xff0c;它可以将多个模型合并成一个整体。然而&#xff0c;有时候在合并后却发现部分模型消失了&#xff0c;这可能会让人感到困惑和失望。本文将探讨为什么合并的3D模型中会出现没有模型的情况&#xff0c;并提供一些解决方法…

Web前端一套全部清晰 ③ day2 HTML 标签综合案例

别让平淡生活&#xff0c;耗尽所有向往 —— 24.4.26 综合案例 —— 一切都会好的 网页制作思路&#xff1a;从上到下&#xff0c;先整体到局部&#xff0c;逐步分析制作 分析内容 ——> 写代码 ——>保存——>刷新浏览器&#xff0c;看效果 <!DOCTYPE html> &l…

ubuntu22 部署fastDFS单节点和集群,整合Spring Boot(刚部署成功)

ubuntu22 部署fastDFS单节点和集群 一、先准备1、所需依赖安装2、下载安装包 二、安装FastDFS单节点1、libfastcommon安装1.1、创建软连接 2、安装fastDFS2.1、fastDFS目录简单介绍2.2、创建软连接 3、配置和启动Tracker服务3.1、修改Tracker配置文件3.2、启动Tracker 4、配置和…

【笔试强训】除2!

登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器&#xff0c;C、Java、前端、产品、运营技能学习/备考/求职题库&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://ac.nowcoder.com/acm/…

IDEA插件分享 - enum-quick-generate 实现枚举类自动生成

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

代码随想录算法训练营DAY38|C++动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

文章目录 动态规划理论基础什么是动态规划动态规划的解题步骤DP数组以及下标的含义递推公式DP数组初始化DP数组遍历顺序打印DP数组动态规划五部曲 动态规划应该如何debug 509.斐波那契数什么是斐波那契数列动态规划五部曲确定dp数组下标以及含义确定递推公式dp数组如何初始化确…

深入理解Java消息中间件-组件-绑定

引言&#xff1a; 在消息队列的使用过程中&#xff0c;消息的绑定是实现消息路由和分发的重要环节。通过消息的绑定&#xff0c;可以将消息从交换器路由到队列中&#xff0c;实现消息的可靠传递和处理。本文将介绍消息的绑定的实现原理以及其背后的原理。 一、实现原理 消息的…

碎碎念,有关果园就业生涯应该如何规划

这篇只是为了揭开一些就业现状&#xff0c;主要是计算机和电子信息方向&#xff0c;都是我和身边人血泪一般的教训&#xff0c;想到什么写什么。 实习篇 实习非常非常的重要&#xff0c;一定要跳出学生思维&#xff0c;如果没把握保研就不要把大量时间浪费在追求高绩点上&…

Java23种设计模式-行为型模式之中介者模式

中介者模式&#xff08;Mediator Pattern&#xff09;&#xff0c;也称为仲裁者模式&#xff0c;定义了一个中介对象&#xff0c;用以封装一系列对象之间的交互。中介者使各个对象不需要显示地相互引用&#xff0c;从而使耦合度降低&#xff0c;而且可以独立地改变它们之间的交…

数据分析:甲基化分析-从DNA methylation的IDAT文件到CpG site的Beta values

介绍 DNA Methylation和疾病的发生发展存在密切相关&#xff0c;它一般通过CH3替换碱基5‘碳的H原子&#xff0c;进而调控基因的转录。常用的DNA methylation是Illumina Infinium methylation arrays&#xff0c;该芯片有450K和850K&#xff08;也即是EPIC&#xff09;。 该脚…

Mac虚拟机装Windows Mac环境安装Win虚拟机教程 macbookpro安装windows虚拟机

在如今多元的数字时代&#xff0c;我们经常需要在不同的操作系统环境下进行工作和学习。而对于Mac用户来说&#xff0c;有时候需要在自己的电脑上安装Windows操作系统&#xff0c;以体验更多软件及功能&#xff0c;而在Mac安装Windows虚拟机是常用的一种操作。下面就来看看Mac虚…

学习 Rust 的第十二天:如何使用向量

大家好&#xff0c; 今天我们来看看计算机科学中的一种基本数据结构&#xff0c;即向量。向量在 Rust 中扮演着至关重要的角色&#xff0c;它在各种编程任务中都发挥着重要作用。像 Rust 这样的系统编程语言以其对安全性和性能的强调而闻名&#xff0c;因此向量提供了一些强大…

flutter开发实战-build apk名称及指令abiFilters常用gradle设置

flutter开发实战-build apk名称及指令abiFilters常用gradle设置 最近通过打包flutter build apk lib/main.dart --release&#xff0c;发现apk命名规则需要在build.gradle设置。这里记录一下。 一、apk命名规则 在android/app/build.gradle中需要设置 android.applicationVa…

数字身份管理:Facebook如何利用区块链技术?

随着数字化进程的加速&#xff0c;个人身份管理已成为一个关键议题。在这方面&#xff0c;区块链技术正在逐渐展现其巨大潜力。作为全球最大的社交媒体平台&#xff0c;Facebook也在积极探索和应用区块链技术来改进其数字身份管理系统。本文将深入探讨Facebook如何利用区块链技…

回归与聚类——模型保存与加载(五)

sklearn模型的保存和加载API from sklearn.externals import joblib保存&#xff1a;joblib.dump(rf,‘test.pkl’)加载&#xff1a;estimator joblib.load(‘test.pkl’) 线性回归的模型保存加载案例 获取数据、划分数据集、标准化、预估器、保存模型、得出模型、模型评估 /…

巴西游戏市场海外营销洞察

巴西作为南美洲最大的国家&#xff0c;近年来在游戏产业领域取得了显著的发展&#xff0c;2023年巴西整体移动游戏市场收入规模超60亿元&#xff0c;显示出强劲的市场活力。巴西游戏市场以其庞大的用户基础&#xff0c;不断增长的消费能力以及日益完善的产业环境&#xff0c;吸…

VSCODE通过SFTP链接VM进行开发

在vscode插件里面搜索sftp&#xff0c;安装。 安装之后&#xff0c;按ctrlshiftp&#xff0c;找到sftp的config 然后填写刚刚的IP&#xff0c;然后是你的用户名密码 如果是通过密钥链接的话就是这样配置 然后切换到这个sftp的tab里面 然后在你的项目右键&#xff0c;然后选择op…

el-date-picker 禁用时分秒选择(包括禁用下拉框展示)

2024.04.26今天我学习了对el-date-picker进行禁用时分秒&#xff0c; 在使用el-date-picker组件的时候&#xff0c;我们有可能遇到需要把时分秒的时间固定&#xff0c;然后并且不能让他修改&#xff1a; 1714120999296 比如右上角的这个时间&#xff0c;我们要给它固定是‘08:…

CSP初赛知识精讲--线性数据结构

第十五节 线性树形结构 基础知识 线性表 线性表是指由n个具有相同特性的数据元素组成的有限序列&#xff0c;是最基本、最简单&#xff0c;也是最常用的一种数据结构。队列、栈、链表、哈希表等数据结构逻辑上都属于线性表。一般来讲&#xff0c;表中数据之间的关系是一对一的…

WPS Word自动编号转文本

原理 使用WPS自带的宏功能&#xff0c;一键替换 过程 调出"开发工具"选项 文件->选项->自定义功能区->选中开发工具->确认 创建宏 工具 -> 运行宏 编写宏 在弹出来的框里&#xff0c;粘贴代码 如果弹窗类似如下&#xff0c;这是JS宏 则…