uniapp_05_許可權檢測和跳轉到設置

来源:https://www.cnblogs.com/tsuru/archive/2023/08/11/17577761.html
-Advertisement-
Play Games

## 關於 uniapp 許可權申請和跳轉系統頁面 * 查詢許可權 * 跳轉到應用詳情 * 跳轉到系統設置 * 參考 ### `此文中所有 IOS 中使用的代碼,因為沒有設備所以均未經過實機測試` ### 查詢許可權 > uni.authorize 獲取許可權只支持微信小程式不支持app,只能用 Nativ ...


關於 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啟動方法大全


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 屏蔽驅動列印信息 root許可權:echo "1 4 1 7" > /proc/sys/kernel/printk sudo sh -c "sudo echo "1 4 1 7" > /proc/sys/kernel/printk 實現觸摸屏校驗 第一次進入Linux系統時,會出現觸摸校驗提示,按提示 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230811232544082-164229613.png) # 1. 基本信息 SQL經典實例 SQL Cookbook [[美]安東尼·莫利納羅(Anthony Molin ...
  • ![file](https://img2023.cnblogs.com/other/3195851/202308/3195851-20230811181235894-1707158282.png) # 個人簡介 * 王海林 白鯨開源研發工程師 * GitHub ID:hailin0 * 做過性能監控 ...
  • GaussDB(DWS)支持多種相容模式,為了相容目標資料庫,各模式之間或多或少存在一些行為差異。這裡分享一個mysql相容模式下的表達式函數因不同寫法引發的結果差異案例。 ...
  • GaussDB(for Redis)提供了完備的大Key解決方案,支持大Key線上診斷、監控預警、承載力強等能力,彌補了開源Redis在大key問題上的不足,讓DBA如虎添翼。 ...
  • 在數字經濟時代下,數據驅動業務創新發展已經成為企業的主要選擇,基金行業機構也在積極推進數字化轉型,但機遇與挑戰並存。數據要轉化為[數據要素](https://www.dtstack.com/?src=szsm),需要系統體系化的數據能力建設作為催化劑。 基金行業也表現出一定的痛點,其中表現為數據安全 ...
  • 先看效果,整體界面結構如下 ![image](https://jsd.cdn.zzko.cn/gh/YuanjunXu/Images@main/src/image.4few4wtl3uyo.jpg) 點擊左側菜單欄,右側切換顯示不同頁面內容。 [Vue3使用路由–南河小站](https://www. ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1、效果圖 用手機錄屏再用小程式轉換的gif,可能精度上有點欠缺。 2、實現過程 1、觀察及思考 開始編碼前我們首先觀察展開後的結構:兩個四分之一的圓加三個圓形菜單項。 文章名為用css畫扇形,如上圖所示沒有任何Javascript輔助卻 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...