uniapp獲取當(dāng)前位置及檢測授權(quán)狀態(tài)效果
uniapp獲取當(dāng)前位置及檢測授權(quán)定位權(quán)限
效果圖
Android設(shè)備

點擊 “設(shè)置”,跳轉(zhuǎn)應(yīng)用信息,打開“權(quán)限即可”;

創(chuàng)建js文件
permission.js
- 新建
.js文件,例:permission.js - 管理相關(guān)權(quán)限,例相冊、相機等,可以寫在此文件中
- 根據(jù)不同平臺,處理向系統(tǒng)請求權(quán)限
/// null = 未請求,1 = 已允許,0 = 拒絕|受限, 2 = 系統(tǒng)未開啟
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('已獲取的權(quán)限:');
result = 1
}
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
var deniedPresentPermission = resultObj.deniedPresent[i];
console.log('拒絕本次申請的權(quán)限:');
result = 0
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
var deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log('永久拒絕申請的權(quán)限:');
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 permissionlocation.js
- 檢測當(dāng)前權(quán)限
- 獲取當(dāng)前位置
- 拒絕授權(quán),彈窗提示
- 跳轉(zhuǎn)App應(yīng)用設(shè)置,打開位置權(quán)限
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();
}
/**
* 獲取當(dāng)前位置信息
*/
export const doGetLocation = () => {
uni.getLocation({
success: (res) => {
// 根據(jù)個人所需處理
store.commit('SET_LOCATION', {
lng: res.longitude,
lat: res.latitude
});
console.log('當(dāng)前位置:', 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'
})
}
}
})
}
/**
* 檢測定位權(quán)限
*/
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: "系統(tǒng)定位已關(guān)閉",
showCancel: false,
success: function(res) {}
})
} else if (status.code) {
uni.showModal({
content: status.message
})
} else {
uni.showModal({
content: "為了您更好的體驗App藍牙功能,需要獲取位置信息,請點擊設(shè)置開啟定位權(quán)限",
confirmText: "設(shè)置",
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();
}回調(diào)
location.getLocation((res) => {
if (res != 1) return;
// xxx
});到此這篇關(guān)于uniapp獲取當(dāng)前位置及檢測授權(quán)狀態(tài)的文章就介紹到這了,更多相關(guān)uniapp獲取當(dāng)前位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序使用uni-app開發(fā)小程序及部分功能實現(xiàn)詳解
uni-app是一個使用Vue.js 開發(fā)所有前端應(yīng)用的框架,下面這篇文章主要給大家介紹了關(guān)于微信小程序使用uni-app開發(fā)小程序及部分功能實現(xiàn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08
LayUI動態(tài)設(shè)置checkbox不顯示的解決方法
今天小編就為大家分享一篇LayUI動態(tài)設(shè)置checkbox不顯示的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
前端根據(jù)鏈接生成二維碼的方案及相關(guān)常用API
這篇文章主要介紹了qrcode插件的使用方法,包括ES6/ES7示例、常用API及Vue示例,同時還討論了二維碼的優(yōu)點和缺點,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-01-01
JavaScript判斷textarea值是否為空并給出相應(yīng)提示
假如用戶沒有輸入數(shù)據(jù)則給出相應(yīng)提示,那么該如何來判斷呢?下面以判斷textarea值是否為空為例2014-09-09

