uniapp_05_权限检测和跳转到设置

  • uniapp_05_权限检测和跳转到设置已关闭评论
  • 153 次浏览
  • A+
所属分类:Web前端
摘要

uni.authorize 获取权限只支持微信小程序不支持app,只能用 Native.js 来实现plus.android.requestPermissions(permissions, successCb, errorCB)


关于 uniapp 权限申请和跳转系统页面

  • 查询权限
  • 跳转到应用详情
  • 跳转到系统设置
  • 参考

此文中所有 IOS 中使用的代码,因为没有设备所以均未经过实机测试

查询权限

uni.authorize 获取权限只支持微信小程序不支持app,只能用 Native.js 来实现

  1. 安卓权限查询

    plus.android.requestPermissions(permissions, successCb, errorCB)

    1. permissions:需要查询的权限数组
    2. successCb:成功回调 有三个参数
      granted - Array[String]字符串数组,已获取权限列表;
      deniedPresent - Array[String]字符串数据,已拒绝(临时)的权限列表;
      deniedAlways - Array[String]字符串数据,永久拒绝的权限列表。
    3. 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})         }     ) 
  2. ios权限查询

    ios 权限查询需要先导入对应权限的包

        // 查询定位权限     const cllocationManger = plus.ios.import("CLLocationManager"); 	const status = plus.ios.invoke(cllocationManger, 'authorizationStatus'); 	result = status == 0 || status == 3; 	plus.ios.deleteObject(cllocationManger); 

跳转到应用详情

  1. 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);      
  2. 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);  

跳转到系统设置

  1. 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服务页面 
  2. 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);  

参考

  1. Android跳转系统界面_大全集

  2. Android之APP跳转到权限设置界面适配华为、小米、vivo等

  3. Android跳转具体应用权限管理,三种方式

  4. iOS调用系统功能与跳转到系统设置

  5. iOS 从应用中跳转至系统设置页面里的多种设置页面

  6. UIApplication方法和OpenUrl的基本用法

  7. 5+ App开发Native.js入门指南

  8. IOS10 打开系统设置

  9. iOS开发中的各种权限获取和检查

  10. android如何从应用程序进入设置的各个页面

  11. Android系统设置— android.provider.Settings

  12. Android中action启动方法大全