HarmonyOS 鸿蒙获取微信授权和持续获取位置信息

embedded/2024/11/15 4:55:29/

获取授权
PermissionManager.ets

import { BusinessError } from "@kit.BasicServicesKit";
import { abilityAccessCtrl, bundleManager, PermissionRequestResult, Permissions, common ,Want} from "@kit.AbilityKit";/*** 查询是否有单个权限* @param permission 单个权限字符串* @returns*/
export async function checkAccessToken(permission: Permissions): Promise<boolean> {let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;// 获取应用程序的accessTokenIDlet tokenId: number = 0;try {let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;tokenId = appInfo.accessTokenId;} catch (error) {let err: BusinessError = error as BusinessError;console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);}// 校验应用是否被授予权限try {grantStatus = await atManager.checkAccessToken(tokenId, permission);} catch (error) {let err: BusinessError = error as BusinessError;console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);}return grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;
}/*** 用于UIAbility拉起弹框请求用户授权* 如果用户拒绝授权,将无法再次拉起弹窗,需要用户在系统应用“设置”的界面中手动授予权限。* @param permissions 权限数组* @returns*/
export async function requestPermissions(permissions: Permissions []): Promise<boolean> {const context = getContext();let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();let ret = true;try {let data: PermissionRequestResult = await atManager.requestPermissionsFromUser(context, permissions);let grantStatus: Array<number> = data.authResults;let permissions1 = data.permissions;let length: number = grantStatus.length;for (let i = 0; i < length; i++) {if (grantStatus[i] === 0) {ret = trueconsole.log(`${permissions1} permissions is success`);break;} else {console.log(`${permissions1} permissions is failed`);ret = false;}}} catch (e) {console.log(e.message);ret = false;}return ret;
}export async function openPermissionSettingsPage() {// 获取上下文const context = getContext() as common.UIAbilityContext// 获取包信息const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)// Want信息配置let wantInfo: Want = {bundleName: 'com.huawei.hmos.settings',abilityName: 'com.huawei.hmos.settings.MainAbility',uri: 'application_info_entry',parameters: {// 按照包名打开对应设置页pushParams: bundleInfo.name}}// 打开系统设置页context.startAbility(wantInfo)
}

获取定位
LocationService.ets

import { geoLocationManager } from '@kit.LocationKit';
import { AuthUtil } from './AuthUtil';
import { Permissions } from '@kit.AbilityKit';
import {checkAccessToken, requestPermissions,openPermissionSettingsPage} from  './PermissionManager'export default class LocationService {private locationCallback!: (location: geoLocationManager.Location) => void;async  requestLocationPermission(sucessPermission: (bol:boolean) => void) {const locationPermissions: Permissions[] = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION'];try {// 检查定位权限是否已经授予const hasPermission = await checkAccessToken(locationPermissions[0]);console.log('hasPermission', hasPermission);if (hasPermission) {console.log('定位权限已经授予');sucessPermission(true)} else {console.log('定位权限未授予,请求权限');const isGranted = await requestPermissions(locationPermissions);if (isGranted) {console.log('定位权限请求成功');sucessPermission(true)} else {console.log('定位权限请求失败,需要用户手动授予权限');openPermissionSettingsPage();}}} catch (error) {console.error('定位权限请求失败:', error);openPermissionSettingsPage();}
}//// public async requestLocationPermission( sucessPermission: (bol:boolean) => void) {//   const locationPermissions: Permissions[] = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION'];// 根据实际权限名称修改//   try {//     // 检查定位权限是否已经授予//     const hasPermission = PermissionManager.checkAccessToken(locationPermissions);//     if (hasPermission) {//       console.log('定位权限已经授予');//       // 继续其他业务逻辑//       sucessPermission(true)//     } else {//       console.log('定位权限未授予,请求权限');//       // 请求定位权限//       await PermissionManager.requestPermissions(locationPermissions);//       console.log('定位权限请求成功');//       // 继续其他业务逻辑//       sucessPermission(true)//     }//   } catch (error) {//     console.error('定位权限请求失败:', error);//     sucessPermission(false)//     // 引导用户到系统设置页面手动开启权限//     PermissionManager.openPermissionSettingsPage();//   }// }/*** 开启持续定位* @param onStart 开启定位的回调函数* @param onLocationUpdate 位置更新的回调函数*/public openContinuousLocation(onStart: () => void,onLocationUpdate: (location: geoLocationManager.Location) => void) {this.requestLocationPermission((bol)=>{if(bol){let request: geoLocationManager.ContinuousLocationRequest = {'interval': 1,'locationScenario': geoLocationManager.UserActivityScenario.NAVIGATION}this.locationCallback = (location: geoLocationManager.Location): void => {console.log('定位信息: ' + JSON.stringify(location));onLocationUpdate(location);};try {geoLocationManager.on('locationChange', request, this.locationCallback);onStart(); // 调用开启定位的回调函数} catch (err) {console.error("开启持续定位错误: " + JSON.stringify(err));}}else{onStart(); // 调用开启定位的回调函数}})}/*** 关闭持续定位* @param onStop 关闭定位的回调函数*/public closeContinuousLocation(onStop: () => void) {console.log('关闭持续定位');try {geoLocationManager.off('locationChange', this.locationCallback);onStop(); // 调用关闭定位的回调函数} catch (err) {console.error('关闭持续定位错误: ' + err);}}}

调用,必须封装的closeContinuousLocation才生效

import LocationService from '../../Util/LocationService'OpenContinuosLocation() {// 开启持续定位this.locationService.openContinuousLocation(() => {console.log('定位已开启');this.calculateDrivingInfo(null)},(location) => {console.log('位置更新: ' + JSON.stringify(location));});}/*** 关闭持续定位*/ClosedContinuosLocation() {console.log(' 定位关闭 ClosedContinuosLocation')// 关闭持续定位this.locationService.closeContinuousLocation(() => {console.log('定位已关闭');});}

http://www.ppmy.cn/embedded/104460.html

相关文章

开源通用验证码识别OCR —— DdddOcr 源码赏析(二)

文章目录 前言DdddOcr分类识别调用识别功能classification 函数源码classification 函数源码解读1. 分类功能不支持目标检测2. 转换为Image对象3. 根据模型配置调整图片尺寸和色彩模式4. 图像数据转换为浮点数据并归一化5. 图像数据预处理6. 运行模型&#xff0c;返回预测结果 …

CSS系列之浮动清除clear(三)

一、为什么需要清除浮动 浮动的原理是让元素脱离文档流&#xff0c;直接浮在桌面上。使用浮动后续添加内容布局可能会产生布局混乱&#xff0c;造成高度坍塌&#xff0c;这时候就可以利用清除浮动来解决父元素高度塌陷的问题。 <!DOCTYPE html> <html lang"en&q…

ConcurrentHashmap面试【高频】

ConcurrentHashmap的key,value是否可以为null&#xff1f;为什么&#xff1f; 不行&#xff0c;如果key或者value为null会抛出空指针异常。 原因&#xff1a;null具有二义性问题&#xff0c;没办法确定存储值本身是null&#xff0c;还是说值不存在&#xff08;因为默认是null&a…

【网络安全】WordPress Uncontrolled Resource Consumption

未经许可,不得转载。 文章目录 WordPresswp-cron.php实战漏洞危害解决措施WordPress WordPress 是全球最广泛使用的内容管理系统(CMS),目前约有 43% 的网站依赖于它。由于其用户友好的界面和丰富的插件功能,WordPress 成为了全球最受欢迎的 CMS。 然而,在使用 WordPres…

WordShield 一款轻量级且灵活的敏感词过滤库

简介 WordShield 是一款轻量级且灵活的敏感词过滤库&#xff0c;基于 Spring Boot 构建。它提供了简单易用的 API&#xff0c;用于过滤和管理敏感词汇。 特性 敏感词过滤&#xff1a;自动过滤字符串中的敏感词汇。 默认敏感词列表&#xff1a;内置预设的敏感词列表。 可定制…

记一次学习--webshell绕过(动态检测)

目录 第一种样本 代码分析 第二种样本 代码分析 题目分析 结果 不断学习&#xff0c;不断进步 快就是慢&#xff0c;慢就是快。审视自身 第一种样本 <?php class xxxd implements IteratorAggregate {public $xxx "system";public function __construct(…

ESXi服务器无法安装Windows11:“不符合此版本的Windows所需最低系统要求“

目录 一、问题描述1.使用环境2.问题截图3.问题解析 二、解决方法Ⅰ1.按 ShiftF10 弹出命令提示符2.在弹出的Dos框中输入regedit&#xff0c;回车&#xff0c;进入注册表。3.打开HKEY_LOCAL_MACHINE\SYSTEM\Setup&#xff0c;并新建 LabConfig 的项&#xff0c;在 LabConfig 下创…

STM32学习记录-11-RTC实时时钟

1 Unix时间戳 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间 2 UTC/GMT GMT(Green…