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

 更新时间:2024年04月27日 10:21:33   作者:Smile_ping  
这篇文章主要介绍了uniapp获取当前位置及检测授权状态效果,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

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

效果图

Android设备

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

创建js文件

permission.js

  • 新建 .js 文件,例: permission.js
  • 管理相关权限,例相册、相机等,可以写在此文件中
  • 根据不同平台,处理向系统请求权限
/// null = 未请求,1 = 已允许,0 = 拒绝|受限, 2 = 系统未开启
var isIOS
function 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-PLUS
	let status = await checkPermission();
	if (status !== 1) {
		return status;
	}
	// #endif
	if (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
});

到此这篇关于uniapp获取当前位置及检测授权状态的文章就介绍到这了,更多相关uniapp获取当前位置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用js怎么把&字符换成"&amp:"

    用js怎么把&字符换成"&amp:"

    用js怎么把&字符换成"&amp:"...
    2006-10-10
  • JavaScript实现计数器基础方法

    JavaScript实现计数器基础方法

    这篇文章主要为大家详细介绍了JavaScript实现计数器的基础方法
    ,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 动态加载、移除js/css文件的示例代码

    动态加载、移除js/css文件的示例代码

    本文简单介绍动态加载、移除、替换js/css文件的示例代码,代码简单易懂,非常不错,具有参考借鉴加载,需要的朋友参考下吧
    2018-03-03
  • 基于WebUploader的文件上传js插件

    基于WebUploader的文件上传js插件

    这篇文章主要为大家详细介绍了基于WebUploader的文件上传js插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • JavaScript如何获取一个元素的样式信息

    JavaScript如何获取一个元素的样式信息

    这篇文章主要介绍了JavaScript如何获取一个元素的样式信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 详解Javascript实践中的命令模式

    详解Javascript实践中的命令模式

    这篇文章主要介绍了Javascript实践中的命令模式,对命令模式感兴趣的同学,可以参考下
    2021-05-05
  • Ajax与服务器(JSON)通信实例代码

    Ajax与服务器(JSON)通信实例代码

    这篇文章主要介绍了Ajax与服务器(JSON)通信实例代码的相关资料,并附实例代码,帮助大家学习理解此部分知识,需要的朋友可以参考下
    2016-11-11
  • JavaScript 大数据相加的问题

    JavaScript 大数据相加的问题

    写一个函数处理大数据的相加问题,所谓的大数据是指超出了整型,长整型之类的常规数据类型表示范围的数据。实现语言不限。
    2011-08-08
  • JS html时钟制作代码分享

    JS html时钟制作代码分享

    这篇文章主要为大家分享了JS html时钟的制作代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 详解JavaScript函数

    详解JavaScript函数

    这篇文章主要介绍了JavaScript函数,函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块,需要的朋友可以参考下
    2015-12-12

最新评论