当前位置: 首页 > news >正文

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

获取授权
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('定位已关闭');});}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android 系统连接WIFI显示网络连接受限分析处理
  • CI/CD实践(五)Jenkins Docker 自动化构建部署Node服务
  • kafka的12个重要概念
  • Spatial Structure Constraints for Weakly SupervisedSemantic Segmentation
  • Python实现分水岭图像分割算法
  • 数据类型 NVARCHAR2 与 VARCHAR2 的对比
  • 2024年6月 青少年等级考试机器人实操真题二级
  • 20240830 每日AI必读资讯
  • 公网信息泄露监测(网盘、暗网、搜索引擎、文档平台)思路分享
  • 【推推P1】第一期“小说详情模块”:JAVA开发文档官方版;快来在线实习吧
  • 服务器远程管理
  • R 2火灾温度预测
  • 442一场“吃干榨净”的富贵,是怎么拼出来的?
  • 【Java基础面试题】Java的优势
  • C++:共享指针(shared_ptr)详解
  • __proto__ 和 prototype的关系
  • 【mysql】环境安装、服务启动、密码设置
  • github从入门到放弃(1)
  • HashMap剖析之内部结构
  • Markdown 语法简单说明
  • Meteor的表单提交:Form
  • Theano - 导数
  • 笨办法学C 练习34:动态数组
  • 复杂数据处理
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 构建工具 - 收藏集 - 掘金
  • 官方解决所有 npm 全局安装权限问题
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 理解在java “”i=i++;”所发生的事情
  • 漂亮刷新控件-iOS
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 容器服务kubernetes弹性伸缩高级用法
  • 深入浅出webpack学习(1)--核心概念
  • 我有几个粽子,和一个故事
  • 用jquery写贪吃蛇
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • (+4)2.2UML建模图
  • (1)Jupyter Notebook 下载及安装
  • (3)选择元素——(17)练习(Exercises)
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (二)fiber的基本认识
  • (分类)KNN算法- 参数调优
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (四)进入MySQL 【事务】
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .bat批处理(一):@echo off
  • .Net 8.0 新的变化
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @test注解_Spring 自定义注解你了解过吗?
  • [ C++ ] STL_list 使用及其模拟实现
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [20170705]lsnrctl status LISTENER_SCAN1