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