uniapp獲取當(dāng)前位置及檢測授權(quán)狀態(tài)效果
更新時間:2024年04月27日 10:21:33 作者:Smile_ping
這篇文章主要介紹了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 permission
location.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)文章
JavaScript實現(xiàn)計數(shù)器基礎(chǔ)方法
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)計數(shù)器的基礎(chǔ)方法2017-10-10
,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下