首页 > 其他分享 >uniapp_05_权限检测和跳转到设置

uniapp_05_权限检测和跳转到设置

时间:2023-08-11 17:49:01浏览次数:57  
标签:uniapp const 05 ios plus 跳转 android 权限

关于 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启动方法大全

标签:uniapp,const,05,ios,plus,跳转,android,权限
From: https://www.cnblogs.com/tsuru/p/17577761.html

相关文章

  • 关于django中如何让页面跳转时携带当前页面的参数
    需求分析:处理逻辑步骤:在跳转到目标url时,先要获取当前页url所携带的参数#当前页urlhttp://127.0.0.1:9000/customer/list/?page=11#获取当前页url所携带的参数request.GET.urlencode()#paeg=11构造跳转页面的url#原本跳转页链接http://127.0.0.1:9000/custo......
  • uniapp Vue2升级Vue3使用Vite分包
    uniappVue2使用webpack打包配置根目录下创建vue.config.js文件constpath=require('path')constCopyWebpackPlugin=require('copy-webpack-plugin')//最新版本copy-webpack-plugin插件暂不兼容,推荐v5.0.0letfilePath=''letTimestamp=''//......
  • PantTool SAI(绘图软件) v2023.04.05 中文永久使用
    PantToolSAI是一款流行的绘图软件,专为数字艺术家和插画师设计。它提供了丰富的绘画工具和功能,使用户能够轻松地创作出精美的插图、漫画和动画作品。点击获取PantToolSAI 以下是PantToolSAI的主要特点和功能:简单直观的界面:PantToolSAI采用简洁、直观的界面设计,使用户可......
  • win10蓝屏0x000000ed 0x0000003B 0x000000d1 0x00000050 bad pool header critical pr
    第一:硬件问题也可能是硬盘数据线或电源线接触不良或与硬盘的规格不符等原因引起的。你检查一下你的硬盘有没有接好,有没有松了,重新接一下,还有最近有没有添加新硬件啊,可能是硬件兼容性不足。把内存条拔下来,擦干净金手指,重新插好,重启电脑看看第二:软件问题此种情况一般是由于磁盘存在错......
  • log-2023-05-29
    TODO:**PAPERS:*CODE:CONFUSIONS:*OTHERS:Java子类与父类之间的对象转换(说明继承)......
  • ACM之2000——2050题目答案及解析
    /*****************************2000题**********************************/#include<iostream>#include<algorithm>使用C++中的库函数,实现字符位置调整usingnamespacestd;intmain(void){charn[4];while(cin>>n){if(n[0]>n[1]......
  • Wordpress:如何使用Elementor给页面Button做跳转页面锚点定位?
    网站页面有的关键部分不一定在页面首屏,但是如果其它页面有时候需要做跳转,比如联系框,需要直接跳转到联系框的实际位置,在使用Elementor插件的情况下,如何实现呢?前端技术告诉我们,要实现点击a标签或者按钮跳转到指定位置,可以使用id定位,并在跳转链接后加入#符号附带该ID即可如: ......
  • 智慧工地源码,基于Vue+Spring Cloud +UniApp框架开发
    源码技术架构:微服务+JavaVue+SpringCloud+UniApp+MySql智慧工地管理平台是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。智慧工地管理平台功能包括:劳务实名制管理系统、监测系统、区域安......
  • uniapp中微信小程序取手机号(后端net7+盛派SDK)
    uniapp中微信小程序取手机号(后端net7+盛派SDK)2023年08月09日测试成功,不过看微信的小程序文档8月26日起微信小程序取手机号就要收费了,取一次3分钱。原理:前端取到code后传到后端,后端再把code传给微信的某一接口取手机号前端uniapp中的vue代码:<template><view><......
  • 20天 hot 100 速通计划-day05
    矩阵240.搜索二维矩阵II编写一个高效的算法来搜索*m*x*n*矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例1:输入:matrix=[[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[1......