鸿蒙应用已经在module.json5添加了"name": "ohos.permission.INTERNET权限在真机运行时还是显示没有权限?

新手上路,请多包涵

鸿蒙应用已经在module.json5添加了"name": "ohos.permission.INTERNET权限在真机运行时还是显示没有权限

"requestPermissions": [{
      "name": "ohos.permission.INTERNET",
    }, {
      "name": "ohos.permission.FILE_ACCESS_PERSIST"
    },
      {
        "name": "ohos.permission.READ_MEDIA",
        "reason": "$string:READ_MEDIA_reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.WRITE_MEDIA",
        "reason": "$string:WRITE_MEDIA_reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      }],

数据请求方法

export function getVodData(url: string): Promise<string> {
  return new Promise((resolve, reject) => {
    console.log("kaishi请求数据")//1

    let httpRequest = http.createHttp();
    let options: http.HttpRequestOptions = {
      method: http.RequestMethod.GET,
      expectDataType: http.HttpDataType.STRING,
    };
    httpRequest.request(urlRoot+url, options)
      .then((response) => {
        const vodStr = response.result.toString();
        createVodDataFile("/vodDB.db", vodStr);

        console.log("请求成功请求数据")//2
        resolve(vodStr);
      })
      .catch((err: Error) => {
        console.log("err:" + err);
        console.log("vodData请求数据shibai")//3
        reject(err);
      })
      .finally(() => {
        httpRequest.destroy();
      });
  });
}

运行结果还是报错

02-11 17:28:28.437   23459-23459   A03D00/top.gua...niMovie/JSAPP  pid-23459             I     kaishi请求数据
02-11 17:28:31.815   23459-23459   A03D00/top.gua...niMovie/JSAPP  top.guadou.miniMovie  I     err:Error: Permission denied
02-11 17:28:31.815   23459-23459   A03D00/top.gua...niMovie/JSAPP  top.guadou.miniMovie  I     vodData请求数据shibai
02-11 17:28:31.815   23459-23459   A03D00/top.gua...niMovie/JSAPP  top.guadou.miniMovie  I     请求数据err:Error: Permission denied

怎么样才能请求到数据呀

阅读 1.3k
avatarAI BotBETA

回答

在鸿蒙系统中,尽管在 module.json5 中声明了权限,但还需要在运行时动态请求这些权限,尤其是当应用目标版本是较高版本的鸿蒙系统时(例如 HarmonyOS 3.0 及以上)。ohos.permission.INTERNET 通常不需要动态请求,因为它属于基本权限,但如果在真机上仍然遇到权限问题,可能是因为以下几个原因:

  1. 确保应用已正确签名:未签名的应用或签名不正确的应用可能无法获取到声明的权限。
  2. 检查系统权限管理:用户可能在系统设置中手动禁用了该权限。尽管 INTERNET 权限通常不需要用户手动授权,但检查系统权限管理界面是否有相关设置被禁用是个好主意。
  3. 动态请求其他权限:虽然 INTERNET 权限通常不需要动态请求,但你的代码中还请求了其他权限(如 ohos.permission.FILE_ACCESS_PERSIST, ohos.permission.READ_MEDIA, ohos.permission.WRITE_MEDIA)。确保这些权限也被正确动态请求。
  4. 检查代码逻辑:确保在尝试进行网络请求之前,所有必要的权限请求逻辑都已经执行完毕。
  5. 更新和兼容性问题:确保你的开发环境(SDK、IDE等)和真机系统版本兼容。有时候,系统更新可能会引入新的权限管理策略。
  6. 查看日志和错误信息:更详细地查看应用日志和系统日志,可能会有更具体的错误信息提示权限问题。
  7. 重启设备:有时候,简单的重启设备可以解决权限未生效的问题。

如果以上步骤都检查过了,而问题依旧存在,可能需要更深入地检查代码逻辑或寻求鸿蒙开发社区的帮助。确保在请求网络数据之前,应用的上下文和权限状态都是正确的。

1 个回答

可以参考以下链接:https://developer.huawei.com/consumer/cn/forum/topic/02041746...
仅在module.json5中添加"name": "ohos.permission.INTERNET"权限后,使用如下Demo测试,没有出现权限拒绝报错;其中不包含createVodDataFile,麻烦检查下createVodDataFile方法中是否包含其他需要权限的操作,可以使用debug调试方式查看下:
测试demo:
import { http } from '@kit.NetworkKit';
import { ToastUtil } from '@pura/harmony-utils';

export function getVodData(url: string): Promise<string> {
return new Promise((resolve, reject) => {

console.log("kaishi请求数据")//1

let httpRequest = http.createHttp();
let options: http.HttpRequestOptions = {
  method: http.RequestMethod.GET,
  expectDataType: http.HttpDataType.STRING,
};
httpRequest.request(url, options)
  .then((response) => {
    const vodStr = response.result.toString();
    // createVodDataFile("/vodDB.db", vodStr);
    ToastUtil.showToast("调用成功")
    resolve(vodStr);
  })
  .catch((err: Error) => {
    ToastUtil.showToast("调用失败")
    reject(err);
  })
  .finally(() => {
    httpRequest.destroy();
  });

});
}

@Entry
@Component
struct HttpRequestDemo {
@State message: string = 'Hello World';

build() {

RelativeContainer() {
  Button(this.message)
    .id('HttpRequestDemoHelloWorld')
    .fontSize(50)
    .fontWeight(FontWeight.Bold)
    .alignRules({
      center: { anchor: '__container__', align: VerticalAlign.Center },
      middle: { anchor: '__container__', align: HorizontalAlign.Center }
    })
    .onClick(() => {
      getVodData("https://www.baidu.com/")
    })
}
.height('100%')
.width('100%')

}
}
debug调试方式:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...