parent
cbbc1bc533
commit
0c981a57ba
@ -0,0 +1,272 @@ |
||||
/** |
||||
* 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启 |
||||
*/ |
||||
|
||||
var isIos |
||||
// #ifdef APP-PLUS
|
||||
isIos = (plus.os.name == "iOS") |
||||
// #endif
|
||||
|
||||
// 判断推送权限是否开启
|
||||
function judgeIosPermissionPush() { |
||||
var result = false; |
||||
var UIApplication = plus.ios.import("UIApplication"); |
||||
var app = UIApplication.sharedApplication(); |
||||
var enabledTypes = 0; |
||||
if (app.currentUserNotificationSettings) { |
||||
var settings = app.currentUserNotificationSettings(); |
||||
enabledTypes = settings.plusGetAttribute("types"); |
||||
console.log("enabledTypes1:" + enabledTypes); |
||||
if (enabledTypes == 0) { |
||||
console.log("推送权限没有开启"); |
||||
} else { |
||||
result = true; |
||||
console.log("已经开启推送功能!") |
||||
} |
||||
plus.ios.deleteObject(settings); |
||||
} else { |
||||
enabledTypes = app.enabledRemoteNotificationTypes(); |
||||
if (enabledTypes == 0) { |
||||
console.log("推送权限没有开启!"); |
||||
} else { |
||||
result = true; |
||||
console.log("已经开启推送功能!") |
||||
} |
||||
console.log("enabledTypes2:" + enabledTypes); |
||||
} |
||||
plus.ios.deleteObject(app); |
||||
plus.ios.deleteObject(UIApplication); |
||||
return result; |
||||
} |
||||
|
||||
// 判断定位权限是否开启
|
||||
function judgeIosPermissionLocation() { |
||||
var result = false; |
||||
var cllocationManger = plus.ios.import("CLLocationManager"); |
||||
var status = cllocationManger.authorizationStatus(); |
||||
result = (status != 2) |
||||
console.log("定位权限开启:" + result); |
||||
// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
|
||||
/* var enable = cllocationManger.locationServicesEnabled(); |
||||
var status = cllocationManger.authorizationStatus(); |
||||
console.log("enable:" + enable); |
||||
console.log("status:" + status); |
||||
if (enable && status != 2) { |
||||
result = true; |
||||
console.log("手机定位服务已开启且已授予定位权限"); |
||||
} else { |
||||
console.log("手机系统的定位没有打开或未给予定位权限"); |
||||
} */ |
||||
plus.ios.deleteObject(cllocationManger); |
||||
return result; |
||||
} |
||||
|
||||
// 判断麦克风权限是否开启
|
||||
function judgeIosPermissionRecord() { |
||||
var result = false; |
||||
var avaudiosession = plus.ios.import("AVAudioSession"); |
||||
var avaudio = avaudiosession.sharedInstance(); |
||||
var permissionStatus = avaudio.recordPermission(); |
||||
console.log("permissionStatus:" + permissionStatus); |
||||
if (permissionStatus == 1684369017 || permissionStatus == 1970168948) { |
||||
console.log("麦克风权限没有开启"); |
||||
} else { |
||||
result = true; |
||||
console.log("麦克风权限已经开启"); |
||||
} |
||||
plus.ios.deleteObject(avaudiosession); |
||||
return result; |
||||
} |
||||
|
||||
// 判断相机权限是否开启
|
||||
function judgeIosPermissionCamera() { |
||||
var result = false; |
||||
var AVCaptureDevice = plus.ios.import("AVCaptureDevice"); |
||||
var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide'); |
||||
console.log("authStatus:" + authStatus); |
||||
if (authStatus == 3) { |
||||
result = true; |
||||
console.log("相机权限已经开启"); |
||||
} else { |
||||
console.log("相机权限没有开启"); |
||||
} |
||||
plus.ios.deleteObject(AVCaptureDevice); |
||||
return result; |
||||
} |
||||
|
||||
// 判断相册权限是否开启
|
||||
function judgeIosPermissionPhotoLibrary() { |
||||
var result = false; |
||||
var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary"); |
||||
var authStatus = PHPhotoLibrary.authorizationStatus(); |
||||
console.log("authStatus:" + authStatus); |
||||
if (authStatus == 3) { |
||||
result = true; |
||||
console.log("相册权限已经开启"); |
||||
} else { |
||||
console.log("相册权限没有开启"); |
||||
} |
||||
plus.ios.deleteObject(PHPhotoLibrary); |
||||
return result; |
||||
} |
||||
|
||||
// 判断通讯录权限是否开启
|
||||
function judgeIosPermissionContact() { |
||||
var result = false; |
||||
var CNContactStore = plus.ios.import("CNContactStore"); |
||||
var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0); |
||||
if (cnAuthStatus == 3) { |
||||
result = true; |
||||
console.log("通讯录权限已经开启"); |
||||
} else { |
||||
console.log("通讯录权限没有开启"); |
||||
} |
||||
plus.ios.deleteObject(CNContactStore); |
||||
return result; |
||||
} |
||||
|
||||
// 判断日历权限是否开启
|
||||
function judgeIosPermissionCalendar() { |
||||
var result = false; |
||||
var EKEventStore = plus.ios.import("EKEventStore"); |
||||
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0); |
||||
if (ekAuthStatus == 3) { |
||||
result = true; |
||||
console.log("日历权限已经开启"); |
||||
} else { |
||||
console.log("日历权限没有开启"); |
||||
} |
||||
plus.ios.deleteObject(EKEventStore); |
||||
return result; |
||||
} |
||||
|
||||
// 判断备忘录权限是否开启
|
||||
function judgeIosPermissionMemo() { |
||||
var result = false; |
||||
var EKEventStore = plus.ios.import("EKEventStore"); |
||||
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1); |
||||
if (ekAuthStatus == 3) { |
||||
result = true; |
||||
console.log("备忘录权限已经开启"); |
||||
} else { |
||||
console.log("备忘录权限没有开启"); |
||||
} |
||||
plus.ios.deleteObject(EKEventStore); |
||||
return result; |
||||
} |
||||
|
||||
// Android权限查询
|
||||
function requestAndroidPermission(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('已获取的权限:' + grantedPermission); |
||||
result = 1 |
||||
} |
||||
for (var i = 0; i < resultObj.deniedPresent.length; i++) { |
||||
var deniedPresentPermission = resultObj.deniedPresent[i]; |
||||
console.log('拒绝本次申请的权限:' + deniedPresentPermission); |
||||
result = 0 |
||||
} |
||||
for (var i = 0; i < resultObj.deniedAlways.length; i++) { |
||||
var deniedAlwaysPermission = resultObj.deniedAlways[i]; |
||||
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); |
||||
result = -1 |
||||
} |
||||
resolve(result); |
||||
// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
|
||||
// if (result != 1) {
|
||||
// gotoAppPermissionSetting()
|
||||
// }
|
||||
}, |
||||
function(error) { |
||||
console.log('申请权限错误:' + error.code + " = " + error.message); |
||||
resolve({ |
||||
code: error.code, |
||||
message: error.message |
||||
}); |
||||
} |
||||
); |
||||
}); |
||||
} |
||||
|
||||
// 使用一个方法,根据参数判断权限
|
||||
function judgeIosPermission(permissionID) { |
||||
if (permissionID == "location") { |
||||
return judgeIosPermissionLocation() |
||||
} else if (permissionID == "camera") { |
||||
return judgeIosPermissionCamera() |
||||
} else if (permissionID == "photoLibrary") { |
||||
return judgeIosPermissionPhotoLibrary() |
||||
} else if (permissionID == "record") { |
||||
return judgeIosPermissionRecord() |
||||
} else if (permissionID == "push") { |
||||
return judgeIosPermissionPush() |
||||
} else if (permissionID == "contact") { |
||||
return judgeIosPermissionContact() |
||||
} else if (permissionID == "calendar") { |
||||
return judgeIosPermissionCalendar() |
||||
} else if (permissionID == "memo") { |
||||
return judgeIosPermissionMemo() |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
// 跳转到**应用**的权限页面
|
||||
function gotoAppPermissionSetting() { |
||||
if (isIos) { |
||||
var UIApplication = plus.ios.import("UIApplication"); |
||||
var application2 = UIApplication.sharedApplication(); |
||||
var NSURL2 = plus.ios.import("NSURL"); |
||||
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
|
||||
var setting2 = NSURL2.URLWithString("app-settings:"); |
||||
application2.openURL(setting2); |
||||
|
||||
plus.ios.deleteObject(setting2); |
||||
plus.ios.deleteObject(NSURL2); |
||||
plus.ios.deleteObject(application2); |
||||
} else { |
||||
// console.log(plus.device.vendor);
|
||||
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); |
||||
} |
||||
} |
||||
|
||||
// 检查系统的设备服务是否开启
|
||||
// var checkSystemEnableLocation = async function () {
|
||||
function checkSystemEnableLocation() { |
||||
if (isIos) { |
||||
var result = false; |
||||
var cllocationManger = plus.ios.import("CLLocationManager"); |
||||
var result = cllocationManger.locationServicesEnabled(); |
||||
console.log("系统定位开启:" + result); |
||||
plus.ios.deleteObject(cllocationManger); |
||||
return result; |
||||
} else { |
||||
var context = plus.android.importClass("android.content.Context"); |
||||
var locationManager = plus.android.importClass("android.location.LocationManager"); |
||||
var main = plus.android.runtimeMainActivity(); |
||||
var mainSvr = main.getSystemService(context.LOCATION_SERVICE); |
||||
var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER); |
||||
console.log("系统定位开启:" + result); |
||||
return result |
||||
} |
||||
} |
||||
|
||||
module.exports = { |
||||
judgeIosPermission: judgeIosPermission, |
||||
requestAndroidPermission: requestAndroidPermission, |
||||
checkSystemEnableLocation: checkSystemEnableLocation, |
||||
gotoAppPermissionSetting: gotoAppPermissionSetting |
||||
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,171 @@ |
||||
import permision from '../../libs/permission.js' |
||||
|
||||
// 主函数
|
||||
export const getLocation = async () => { |
||||
return new Promise((resolve, reject) => { |
||||
uni.getSystemInfo({ |
||||
success: res => { |
||||
// uni-app 运行平台
|
||||
let uniPlatform = res.uniPlatform; |
||||
// 微信小程序是否开启位置信息按钮
|
||||
let locationEnabled = res.locationEnabled; |
||||
// 微信小程序是否位置信息授权
|
||||
let locationAuthorized = res.locationAuthorized; |
||||
let osName = res.osName; |
||||
console.log(uniPlatform, locationEnabled, locationAuthorized); |
||||
if (uniPlatform == "app") { |
||||
// 获取当前手机是否开启或关闭了定位服务
|
||||
let isLocationPermision = permision.checkSystemEnableLocation(); |
||||
if (!isLocationPermision) mShowModel("手机定位服务未开启,请到设置界面开启", ''); |
||||
if (isLocationPermision) { |
||||
let permisionStr = osName == "ios" ? "location" : "android.permission.ACCESS_FINE_LOCATION"; |
||||
// 验证app是否被授权了获取位置权限
|
||||
let result = osName == "ios" ? iosPermision(permisionStr) : |
||||
androidPermision(permisionStr).then(res => { |
||||
if (res == -1) mShowModel("你已拒绝获取位置信息授权,请到权限管理进行授权", "授权"); |
||||
if (res == 0) mShowModel("应用未获取位置信息授权,请到权限管理进行授权", "授权"); |
||||
if (res == 1) getCoordinate().then(res => { |
||||
resolve(res); |
||||
}) |
||||
}) |
||||
if (result == true) getCoordinate().then(res => { |
||||
resolve(res); |
||||
}) |
||||
} |
||||
} |
||||
if (uniPlatform == "mp-weixin") weiXinPermision(locationEnabled, |
||||
locationAuthorized).then(res => { |
||||
console.log(res, 38) |
||||
if (res == true) getCoordinate().then(res => { |
||||
resolve(res); |
||||
}) |
||||
}); |
||||
} |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
const iosPermision = (permisionStr) => { |
||||
let result = permision.judgeIosPermission(permisionStr); |
||||
if (!result) mShowModel("应用未获取位置信息授权,请到权限管理进行授权", "授权"); |
||||
return result |
||||
} |
||||
|
||||
const androidPermision = async (permisionStr) => { |
||||
return new Promise((resolve, reject) => { |
||||
let result = permision.requestAndroidPermission(permisionStr); |
||||
// if (result == -1) mShowModel("您已拒绝获取位置信息授权,是否授权", "授权");
|
||||
// if (result == 0) mShowModel("应用未获取位置信息授权,是否授权", "授权");
|
||||
resolve(result); |
||||
}) |
||||
} |
||||
|
||||
const weiXinPermision = async (locationEnabled, locationAuthorized) => { |
||||
return new Promise((resolve, reject) => { |
||||
if (locationEnabled == false) { |
||||
mShowModel("手机定位服务未开启,请到设置界面进行开启", ''); |
||||
} else { |
||||
// 手机定位服务(GPS)已授权
|
||||
uni.authorize({ |
||||
scope: "scope.userLocation", |
||||
success: res => { |
||||
console.log(res, 72); |
||||
resolve(true); |
||||
}, |
||||
fail: err => { |
||||
uni.showModal({ |
||||
content: "需要授权位置信息", |
||||
confirmText: "确认授权", |
||||
success: res => { |
||||
if (res.confirm) { |
||||
uni.openSetting({success: res => { |
||||
if (res.authSetting["scope.userLocation"]) { |
||||
mShowToast("授权成功"); |
||||
resolve(true); |
||||
} else { |
||||
mShowToast("授权失败,请重新授权") |
||||
uni.showModal({ |
||||
title: "授权", |
||||
content: "获取授权失败,是否前往授权设置?", |
||||
success: res => { |
||||
console.log(res, 91); |
||||
if (res.confirm) uni.openSetting(); |
||||
}, |
||||
fail: err => { |
||||
mShowToast("系统错误") |
||||
} |
||||
}) |
||||
} |
||||
} |
||||
}) |
||||
} else { |
||||
mShowToast("你拒绝了授权,无法获取位置信息") |
||||
} |
||||
} |
||||
}) |
||||
}, |
||||
// complete: res => {
|
||||
// console.log(res, 108);
|
||||
// if (res.errMsg == "authorize:ok") {
|
||||
// resolve(true);
|
||||
// } else {
|
||||
// uni.showModal({
|
||||
// title: "授权",
|
||||
// content: "获取授权失败,是否前往授权设置?",
|
||||
// success: res => {
|
||||
// if (res.confirm) uni.openSetting();
|
||||
// },
|
||||
// fail: err => {
|
||||
// mShowToast("系统错误!")
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
}) |
||||
} |
||||
}) |
||||
} |
||||
|
||||
const getCoordinate = async (options) => { |
||||
// 获取坐标
|
||||
return new Promise((resolve, reject) => { |
||||
uni.getLocation({ |
||||
type: "wgs84", |
||||
success: (res) => { |
||||
resolve({ |
||||
lat: res.latitude, |
||||
lng: res.longitude |
||||
}); |
||||
} |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
|
||||
const mShowModel = (content, confirmText) => { |
||||
console.log(content, confirmText) |
||||
const params = {}; |
||||
uni.showModal({ |
||||
content: content, |
||||
showCancel: !!confirmText, |
||||
confirmText: confirmText || '取消', |
||||
success: res => { |
||||
if (res.confirm) { |
||||
if (confirmText) { |
||||
permision.gotoAppPermissionSetting(); |
||||
} |
||||
}
|
||||
}, |
||||
fail: (e) => { |
||||
console.log(e); |
||||
}, |
||||
}) |
||||
} |
||||
|
||||
|
||||
const mShowToast = (message, options = {}) => { |
||||
uni.showToast({ |
||||
title: message || "提交成功!", |
||||
icon: options.icon || "none" |
||||
}) |
||||
} |
@ -1,4 +1,5 @@ |
||||
export const SET_LOGIN = "SET_LOGIN"; |
||||
export const SET_LOGOUT = "SET_LOGOUT"; |
||||
export const SET_ROOT_FONT = "SET_ROOT_FONT"; |
||||
export const UPDATE_USER_INFO = "UPDATE_USER_INFO"; |
||||
export const UPDATE_USER_INFO = "UPDATE_USER_INFO"; |
||||
export const SET_POSITION = "SET_POSITION"; |
Loading…
Reference in new issue