|
关于 uniapp 权限申请和跳转系统页面
此文中所有 IOS 中使用的代码,因为没有设备所以均未经过实机测试
查询权限
uni.authorize 获取权限只支持微信小程序不支持app,只能用 Native.js 来实现
- 安卓权限查询
plus.android.requestPermissions(permissions, successCb, errorCB)
- permissions:需要查询的权限数组
- successCb:成功回调 有三个参数
granted - Array[String]字符串数组,已获取权限列表;
deniedPresent - Array[String]字符串数据,已拒绝(临时)的权限列表;
deniedAlways - Array[String]字符串数据,永久拒绝的权限列表。
- 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);
复制代码 参考
来源:https://www.cnblogs.com/tsuru/p/17577761.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|