uniapp_05_权限检测和跳转到设置
关于 uniapp 权限申请和跳转系统页面[*]查询权限
[*]跳转到应用详情
[*]跳转到系统设置
[*]参考
此文中所有 IOS 中使用的代码,因为没有设备所以均未经过实机测试
查询权限
uni.authorize 获取权限只支持微信小程序不支持app,只能用 Native.js 来实现
[*]安卓权限查询
plus.android.requestPermissions(permissions, successCb, errorCB)
[*]permissions:需要查询的权限数组
[*]successCb:成功回调 有三个参数
granted - Array字符串数组,已获取权限列表;
deniedPresent - Array字符串数据,已拒绝(临时)的权限列表;
deniedAlways - Array字符串数据,永久拒绝的权限列表。
[*]errorCB: 失败回调
// 查询定位和推送权限
plus.android.requestPermissions(
['android.permission.ACCESS_FINE_LOCATION', 'push'],
(res)=>{
console.log("====> 权限查询成功", res);
// granted: 以获取到权限
// deniedPresent:已拒绝权限(临时)
// deniedAlways :已拒绝权限(永久)
const { granted, deniedPresent, deniedAlways } = res;
if(granted.length) resolve(1);
if(deniedPresent.length) resolve(0);
if(deniedAlways.length) resolve(-1);
},
(err)=>{
// code : 错误编码
// message: 错误信息描述
resolve({...err})
}
)
[*]ios权限查询
ios 权限查询需要先导入对应权限的包
// 查询定位权限
const cllocationManger = plus.ios.import("CLLocationManager");
const status = plus.ios.invoke(cllocationManger, 'authorizationStatus');
result = status == 0 || status == 3;
plus.ios.deleteObject(cllocationManger);
跳转到应用详情
[*]Android 跳转
setData : 传入的是uri,用于数据的过滤。setData可以被系统用来寻找匹配目标组件。
putExtra: 只是用来设定各种不同类型的附加数据。不被系统用来寻找匹配目标组件。
直接跳转应用详情里的权限页需要适配不同品牌的手机 (用雷电模拟器试了华为的发现没用)
// 跳转到应用详情
const main = plus.android.runtimeMainActivity();
const Intent = plus.android.importClass('android.content.Intent');
const Settings = plus.android.importClass("android.provider.Settings");
const Uri = plus.android.importClass("android.net.Uri");
const pkName = main.getPackageName(); // 获取应用id
const uri = Uri.fromParts("package", pkName, null); //
let _intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
_intent.setData(uri);
main.startActivity(_intent);
// 跳转到应用详情对应权限设置
// 华为 (不生效)
const main = plus.android.runtimeMainActivity();
const Intent = plus.android.importClass('android.content.Intent');
let _intent = new Intent();
_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
const pkName = main.getPackageName();
_intent.putExtra("packageName", pkName);
const ComponentName = plus.android.importClass('android.content.ComponentName');
const _comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");
_intent.setComponent(_comp);
main.startActivity(_intent);
[*]IOS 跳转
// 跳转到应用详情
const UIApplication = plus.ios.import("UIApplication");
const application2 = UIApplication.sharedApplication();
const NSURL2 = plus.ios.import("NSURL");
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
const setting2 = NSURL2.URLWithString("app-settings:");
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2);
// 跳转到应用详情对应权限设置
const app = plus.ios.invoke('UIApplication', 'sharedApplication');
// UIApplicationOpenSettingsURLString
const setting = plus.ios.invoke('NSURL', 'URLWithString:', "App-Prefs:root=Privacy&path=LOCATION_SERVICES");
plus.ios.invoke(app, 'openURL:', setting);
plus.ios.deleteObject(setting);
plus.ios.deleteObject(app);
跳转到系统设置
[*]Android 跳转
// 设置
const main = plus.android.runtimeMainActivity(),
Intent = plus.android.importClass('android.content.Intent'),
Settings = plus.android.importClass('android.provider.Settings');
let _intent = new Intent(Settings.ACTION_SETTINGS);
main.startActivity(_intent);
// 定位服务设置
const main = plus.android.runtimeMainActivity();
const Intent = plus.android.importClass('android.content.Intent'),
Settings = plus.android.importClass('android.provider.Settings');
const pkName = main.getPackageName(),
uid = main.getApplicationInfo().plusGetAttribute("uid");
let _intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
_intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
main.startActivity(_intent); // 打开系统设置GPS服务页面
[*]IOS 跳转
// 设置
const app = plus.ios.invoke('UIApplication', 'sharedApplication');
const setting = plus.ios.invoke('NSURL', 'URLWithString:', 'app-settings:');
plus.ios.invoke(app, 'openURL:', setting);
plus.ios.deleteObject(setting);
plus.ios.deleteObject(app);
参考
[*]Android跳转系统界面_大全集
[*]Android之APP跳转到权限设置界面适配华为、小米、vivo等
[*]Android跳转具体应用权限管理,三种方式
[*]iOS调用系统功能与跳转到系统设置
[*]iOS 从应用中跳转至系统设置页面里的多种设置页面
[*]UIApplication方法和OpenUrl的基本用法
[*]5+ App开发Native.js入门指南
[*]IOS10 打开系统设置
[*]iOS开发中的各种权限获取和检查
[*]android如何从应用程序进入设置的各个页面
[*]Android系统设置— android.provider.Settings
[*]Android中action启动方法大全
来源:https://www.cnblogs.com/tsuru/p/17577761.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页:
[1]