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

news2024/11/14 20:09:17

网络请求(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()
    // 路径每次拼接,并不会每次兼容,要使用axios
    const res = await req.request(HttpRequest.url + path, //url
     {
      method: method, //get post
       extraData: 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', // 公用部分的url
    transformRequest:()=>{}, // 发送请求前的操作函数
    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.coloradmin.cn/o/2156798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git仓库服务器端损坏如何用本地code重新部署

文章目录 1. **在新服务器上创建一个新的 Git 仓库**2. **将本地仓库推送到新服务器**2.1. 添加新服务器为远程仓库2.2. 推送代码和历史记录2.3. 推送 tags&#xff08;如果有 tags&#xff09; 3. **在新服务器上拉取代码并部署**4. **确保修改记录和历史完整**5. **可选&…

Flink Task 日志文件隔离

Flink Task 日志文件隔离 任务在启动时会先通过 MdcUtils 启动一个 slf4j 的 MDC 环境&#xff0c;然后将 jobId 添加到 slf4j 的 MDC 容器中&#xff0c;随后任务输出的日志都将附带 joid。 MDC 介绍如下&#xff1a; MDC ( Mapped Diagnostic Contexts )&#xff0c;它是一个…

Linux 线程互斥

文章目录 3. Linux 线程互斥3.1 相关概念3.2 互斥量mutex3.3 互斥量的接口3.4 改进3.2中的代码3.5 互斥量&#xff08;锁&#xff09;的原理3.6 封装一下原生锁的接口&#xff0c;RAII风格的锁3.7 可重入 和 线程安全 3. Linux 线程互斥 3.1 相关概念 临界资源&#xff1a;多…

web自动化学习笔记

目录 一、web自动化测试环境搭建二、web自动化测试第一个脚本三、selenium 8种定位方式3.1、通过id定位3.2、通过name定位3.3、通过tag_name&#xff08;标签名&#xff09;定位3.4、通过class值进行定位3.5、通过链接文本定位3.6、通过部分链接文本定位3.7、通过xpath定位3.8、…

MySQL:SQL语句执行过程

本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程&#xff0c;包括 SQL 的查询在 MySQL 内部会怎么流转&#xff0c;SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构&#xff0c;知道了 MySQL 由那些组件组成以及这些组件的作用是什么&#xf…

Spring_AMQP

文章目录 一、SpringAMQP二、SpringAMQP应用2.1、消息发送2.2、消息接收 一、SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址。 SpringAMQP提供了三个功能&am…

python27 安装pywinauto-0.6.8

文章目录 环境所需依赖依赖查找所需依赖链接1. comtypes2. six3. pyWin324. (optional) Pillow (to make screenshoots)5. pywinauto 安装结果 环境 windows 11 Python 2.7 setuptools 18.0.1 pip 18.1 所需依赖 依赖查找 按照官方文档&#xff08;https://pywinauto.readt…

MMROTATE 1.X特征图可视化(绘制Heat Map)

本文参考MMYOLO官方的特征图可视化教程&#xff0c;对MMROTATE相关算法进行特征图可视化 1. 新建featmap_vis_demo.py文件 在mmrotate项目文件夹下新建 featmap_vis_demo.py &#xff1a; # Copyright (c) OpenMMLab. All rights reserved. import argparse import os from t…

java intellij idea开发步骤,使用指南,工程创建与背景色字体配置,快捷键

intellij idea2021 配置背景色&#xff0c;字体大小&#xff0c;主题 快捷键

STM32系统时钟

时钟为单片机提供了稳定的机器周期&#xff0c;从而使我们的系统能够正常的运行 时钟就像我们人的心脏&#xff0c;一旦有问题就整个都会崩溃 stm32有很多外设&#xff0c;但不是所有的外设都使用同一种时钟频率工作&#xff0c;比如我们的内部看门狗和RTC 只要30几k的频率就…

计算机毕业设计推荐-基于python的白酒销售数据可视化分析

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、白酒销售数据…

react:React Hook函数

使用规则 只能在组件中或者其他自定义的Hook函数中调用 只能在组件的顶层调用&#xff0c;不能嵌套在if、for、 其他函数中 基础Hook 函数 useState useState是一个hook函数&#xff0c;它允许我们向组件中添加一个状态变量&#xff0c;从而控制影响组件的渲染结果 示例1…

[Excel VBA]如何使用VBA自动生成图表

在Excel中&#xff0c;图表是可视化数据的重要工具。以下是一个VBA代码示例&#xff0c;帮助你自动生成图表。 1. 代码说明 该代码会根据指定数据范围创建一个柱状图&#xff0c;并设置图表的基本属性。 2. VBA代码 Sub CreateChart()Dim ws As WorksheetDim chartObj As Ch…

百度营销转化追踪(网页JS布码)

引言&#xff1a;使用百度营销api配置网站上各个模块组件的转化追踪&#xff0c;统计网站上的各组件模块点击等信息。 一、选择接入方式&#xff08;本文选择的是网页JS布码&#xff09; 参考文档&#xff1a;百度营销-商业开发者中心百度开发者中心是一个面向开发者的知识分享…

Java启动Tomcat: Can‘t load IA 32-bit .dll on a AMD 64-bit platform报错问题解决

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Java-数据结构-排序-(二) (๑¯∀¯๑)

文本目录&#xff1a; ❄️一、交换排序&#xff1a; ➷ 1、 冒泡排序&#xff1a; ▶ 代码&#xff1a; ➷ 2、 快速排序&#xff1a; ☞ 基本思想&#xff1a; ☞ 方法一&#xff1a;Hoare法 ▶ 代码&#xff1a; ☞ 方法二&#xff1a;挖坑法 ▶ 代码&#xff1a; ☞ 方法三…

GNU编译器(GCC):编译的4个过程及.elf、.list、.map文件功能说明

0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分&#xff1a; &#xff08;1&#xff09;编译器 &#xff08;2&#xff09;汇编器 &#xff08;3&#xff09;链接器 &#xff08;4&#xff09;lib库 在GNU工具链中&…

Linux-文件的压缩、解压

Linux系统常见有两种压缩格式&#xff0c;后缀分别是&#xff1a; .tar 称之为tarball&#xff0c;简单的将文件组装到一个.tar的文件内&#xff0c;并没有太多的文件体积减少&#xff0c;仅仅是简单的封装.gz gzip格式压缩文件&#xff0c;可以极大的减少压缩后的体积 针对这…

Lua中..和...的使用区别

一. .. 的用法 二. ... 的用法 在 Lua 中&#xff0c;... 是一个特殊符号&#xff0c;它用于表示不定数量的参数。当你在函数定义或调用中使用 ... 时&#xff0c;它可以匹配任意数量的参数&#xff0c;并将它们作为列表传递。在您的代码示例中&am…

基于SSD的RAG技术方案,推动LLM规模扩展

随着大型语言模型&#xff08;LLM&#xff09;的不断发展&#xff0c;它们在虚拟助手、聊天机器人和对话系统等应用中发挥着重要作用。然而&#xff0c;LLM面临的挑战之一是它们可能会生成虚假或误导性的信息&#xff0c;即所谓的“幻觉”。为了解决这一问题&#xff0c;检索增…