当前位置: 代码网 > it编程>编程语言>Javascript > uniapp获取当前位置及检测授权状态效果

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

2024年05月26日 Javascript 我要评论
uniapp获取当前位置及检测授权定位权限效果图android设备点击 “设置”,跳转应用信息,打开“权限即可”;创建js文件permission.js

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获取当前位置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com