HarmonyOS---权限和http/Axios网络请求

news/2024/11/12 1:15:42/

网络请求(http,axios)

目录

  • 一、应用权限管理
    • 1.1权限的等级
    • 1.2授权方式
    • 1.3声明权限的配置
    • 1.4如何向用户进行申请
  • 二、内置http请求使用
  • 三、Axios请求使用(建议)
    • 3.1 使用方式一
    • 3.2 使用方式二(建议)


一、应用权限管理

应用权限保护的对象分数据和功能的:

  • 数据:个人(照片,通讯录,日历,位置)、设备(标识码,相机,麦克风)

  • 功能:设备(摄像头/麦克风、电话、联网)、应用(悬浮窗、快捷方式、唤起第三方应用、后台运行)

1.1权限的等级

system_core: 该等级提供应用服务操作系统的 - 核心能力
system_basic:该等级提供应用服务的 - 基础服务
normal: 普通的基本应用:默认

1.2授权方式

system_grant:系统授权
指的是系统类型的权限,应用被允许访问的数据不会涉及到用户或设备的敏感信息
安装应用是,应用会询问系统,系统会自动进行授权。
user_grant:用户授权
指的是涉及用户隐私或敏感数据的,如果出现问题,是不可控的。
应用安装后,运行时,会指定弹窗,询问用户是否允许获取权限。

授权申请

1.3声明权限的配置

entry/src/main/module.json5 配置文件中,声明权限:

例:当不需要用户确认和用户确认运行都需要在requestPermissions[]中进行配置:1. 不需要用户确认:{"name": "ohos.permission.INTERNET"  //权限名称:网络},
2. 用户确认 (当需要用户确认时,填写配置信息会有提示,不填则报错)
例:在卡片Call机制中也用到了,保持后台应用:
格式:{"name": "ohos.permission.LOCATION", //定位"reason": "$string:reason_loc",      //描述申请的原因:user_grant时,必填项,因为需要国际化需要在语言文件中设置才可以"usedScene": {                       //描述权限使用的场景:user_grant时,必填项"abilities": [ "EntryAbility" ],   //标识需要使用该权限的 Ability"when": "always"                   //标识使用的时机:inuse:只允许前台, always:前后台都允许}

1.4如何向用户进行申请

:定位
import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; //权限控制管理onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {//唤醒用户授权窗口,只有在user_grant情况下有效try{//创建一个权限管理对象const manager = abilityAccessCtrl.createAtManager()//基于管理对象,申请用户授权manager.requestPermissionsFromUser( this.context, ["ohos.permission.LOCATION","ohos.permission.APPROXIMATELY_LOCATION",...] )}catch(err){promptAction.showToast({message:'获取位置失败!'})}hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');}

扩展:请求方式
GET:
短文本请求,是一种不安全的请求,所有的信息都暴露在地址栏中。
内容的上限是255个字节。
通常都是直接打开网址、超链接a它们使用。
POST:
长文本请求,是一种安全的请求,基于http超文本传输协议的。
数据信息是通过TCP/IP请求协议进行处理的,用户不可见。
数据上限:2MB
如今,我们有一个RestFul请求风格定义,它扩展了更多的请求方式:并不是所有后端服务器都支持

PUT:本质还是post请求。DELETE:本质还是get请求。

二、内置http请求使用

可能会存在个版本不兼容问题:建议使用Axios

在这里插入图片描述

1.开启网络权限: 'ohos.permission.INTERNET'
2.导包: import http from '@ohos.net.http'
3.请求://创建网络请求对象const httpRequest:http.HttpRequest = http.createHttp()// 方式一:异步//异步方法:data就是响应回发的结果//httpRequest.request('url', {...}, (err,data)=>{})// 方式二: 同步//转同步操作try{const res:http.HttpResponse = await httpRequest.request('https://jsonplaceholder.typicode.com/users',{method: http.RequestMethod.GET}   //get请求方式:默认)//处理请求结果:得到一个json对象console.info('http===', res.responseCode)           //状态码console.info('http===', JSON.stringify(res.header)) //头部信息console.info('http===', JSON.stringify(res.result)) //数据结果}catch(err){console.info('http===', err)}finally{//不管成功还是失败,最终,始终关闭请求对象httpRequest.destroy()}
封装工具包格式:async get(path: string, method: http.RequestMethod = http.RequestMethod.GET,extraData: string | Object | ArrayBuffer = ''): Promise<http.HttpResponse> {const req = http.createHttp()// 路径每次拼接,并不会每次兼容,要使用axiosconst res = await req.request(HttpRequest.url + path, //url{method: method, //get postextraData: extraData // {}参数其他信息})req.destroy()return res// 处理请求结果:得到一个json对象// console.info('http===', res.responseCode)           //状态码// console.info('http===', JSON.stringify(res.header)) //头部信息// console.info('http===', JSON.stringify(res.result)) //数据结果}

三、Axios请求使用(建议)

使用Axios需要安装ohpm中的 axios依赖或者在oh-package.json5 加入依赖
方式一:根据命令安装:ohpm install @ohos/axios
方式二:“@ohos/axios”:“^2.2.0”

3.1 使用方式一

直接调用get(),post(), 不建议使用,原因路径每次都是完整的,有重复性

:
开启网络权限: 'ohos.permission.INTERNET'
导包: import axios  from '@ohos/axios'
axios.get('url',{params:{}})
axios.post('url')

3.2 使用方式二(建议)

定义出来公用部分,若不相同可以在调用时进行覆盖

:
开启网络权限: 'ohos.permission.INTERNET'
导包: import axios  from '@ohos/axios'
// 1.公共部分const cont =  axios.create({baseURL:'https://atstudy-1253850831.cos.ap-shanghai.myqcloud.com', // 公用部分的urltransformRequest:()=>{}, // 发送请求前的操作函数transformResponse:()=>{}, // 接收结果timeout:3*1000, // 请求超时时间headers:{} // 头部数据})// 格式: 2.调用 cont.get() /  cont.post()// 此处使用的异步,也可以转为async同步cont.get('/lab-d3/harmonyOS/meituan/shop.json',{timeout:6*1000} // 重写超时时间).then((res: AxiosResponse) => {if (res.status == 200) { // 状态码res.data // 返回数据}}).catch((err: BusinessError) => {promptAction.showToast({ message: "get请求异常"})}).finally(() => {  })

http://www.ppmy.cn/news/1529272.html

相关文章

基于机器学习的注意力缺陷/多动障碍 (ADHD)(python论文+代码)HYPERAKTIV

简述 医疗保健领域的机器学习研究往往缺乏完全可重复性和可比性所需的公共数据。由于患者相关数据附带的隐私问题和法律要求&#xff0c;数据集往往受到限制。因此&#xff0c;许多算法和模型发表在同一主题上&#xff0c;没有一个标准的基准。因此&#xff0c;本文提出了一个公…

基于python+django+vue的旅游网站系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

笔记本的快捷键分享

今天来跟大家分享一下常见的笔记本的快捷键 1联想 FnF1&#xff1a;让计算机进入睡眠模式 FnF2&#xff1a;关闭/开启LED屏幕背光 FnF3&#xff1a;显示器切换 FnF4&#xff1a;在宽屏幕和一般模式之间切换 FnF5&#xff1a;接通/断开无线网卡信号 FnF6&#xff1a;关闭…

[笔记]某变频器,功能列表及参数表

产品代号&#xff1a;INVT GOODDRIVE&#xff0c;这家公司我的产品我似乎在特检院看到过&#xff1f;或者在某个地铁建设工地看到过。是深圳的。 1.产品功能点&#xff1a; 变频锥形电机控制、抱闸转矩验证&#xff1f;抱闸反馈零位检测行程限位超载防护轻载升速&#xff08;…

idea多模块启动

文章目录 idea多模块启动2018版本的idea2019版本的idea idea多模块启动 2018版本的idea 1.首先看一下view> Tool Windows下有没有Run Dashboard 如果有&#xff0c;点击一下底部的窗口就会出现 如果不存在&#xff0c;执行下一步 2.查看自己项目的工作空间位置 点击 File&…

OpenGL 原生库1 窗口

初始化GLFW&#xff1a; glfwInit() 初始化GLFW库&#xff0c;这是创建窗口和上下文所必需的第一步。 glfwWindowHint 配置GLFW的上下文版本和配置选项。我们设置了OpenGL版本为3.3&#xff0c;并且使用核心模式。 创建窗口&#xff1a; glfwCreateWindow 尝试创建一个800x6…

postman控制变量和常用方法

1、添加环境&#xff1a; 2、环境添加变量&#xff1a; 3、配置不同的环境&#xff1a;local、dev、sit、uat、pro 4、 接口调用 5、清除cookie方法&#xff1a; 6、下载文件方法&#xff1a;

leetcode 380.O(1) 时间插入、删除和获取随机元素

实现RandomizedSet 类&#xff1a; RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时&#xff0c;向集合中插入该项&#xff0c;并返回 true &#xff1b;否则&#xff0c;返回 false 。bool remove(int val) 当元素 val 存在时&#xff0…