HarmonyOS鸿蒙Next中按照样例代码实现后应用无法自动弹窗,权限申请失败

HarmonyOS鸿蒙Next中按照样例代码实现后应用无法自动弹窗,权限申请失败

环境信息

HarmonyOS 3.1.0, P50 Pro JAD-AL00

crash报错

Device info:OpenHarmony 3.2
Build info:OpenHarmony 3.2.9.1
Module name:com.huawei.maps.navi.hos
Version:1.0.0
Pid:11257
Uid:20040004
Lifetime: 0.000000s
Js-Engine: ark
page: pages/Index.js
Error message: Cannot read property NAVIGATION of undefined

'scenario': geoLocationManager.LocationRequestScenario.NAVIGATION,
^

Stacktrace:

at startLocation (entry/src/main/ets/manager/LocationManager.ts:13:19)
at action (entry/src/main/ets/pages/Index.ets:55:17)

代码

let context = this.context;
let atManager = abilityAccessCtrl.createAtManager();
let permissionList: Array<Permissions>  = [
    'ohos.permission.INTERNET',
    'ohos.permission.APPROXIMATELY_LOCATION',
    'ohos.permission.LOCATION',
    'ohos.permission.LOCATION_IN_BACKGROUND'
];
atManager.requestPermissionsFromUser(context, permissionList).then(
(data) => {
    let grantStatus: Array<number> = data.authResults;
    let length: number = grantStatus.length;
    for (let i = 0; i < length; i++) {
        if (grantStatus[i] === 0) {
            // 用户授权,可以继续访问目标操作
            LogUtil.info('EntryAbility.onWindowStageCreate', 'User grant: ' + permissionList[i]);
        } else {
            // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
            LogUtil.fatal('EntryAbility.onWindowStageCreate', 'User denied: ' + permissionList[i]);
        }
    }
    // 授权成功
}).catch((err) => {
    LogUtil.error('EntryAbility.onWindowStageCreate', `Get permission failed, code is ${err.code}, message is ${err.message}`);
})

执行结果

07-03 17:55:04.867 10172-149/? I 00000/EntryAbility.onWindowStageCreate: -LOG-UTIL- User grant: ohos.permission.INTERNET
07-03 17:55:04.867 10172-149/? F 00000/EntryAbility.onWindowStageCreate: -LOG-UTIL- User denied: ohos.permission.APPROXIMATELY_LOCATION
07-03 17:55:04.868 10172-149/? F 00000/EntryAbility.onWindowStageCreate: -LOG-UTIL- User denied: ohos.permission.LOCATION
07-03 17:55:04.868 10172-149/? F 00000/EntryAbility.onWindowStageCreate: -LOG-UTIL- User denied: ohos.permission.LOCATION_IN_BACKGROUND
07-03 17:55:36.518 10172-149/? E 00000/LocationManager::startLocation: -LOG-UTIL- Exception: BussinessError 201: Permission denied.


更多关于HarmonyOS鸿蒙Next中按照样例代码实现后应用无法自动弹窗,权限申请失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

更多关于HarmonyOS鸿蒙Next中按照样例代码实现后应用无法自动弹窗,权限申请失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


配置了,如下:

  • "name" : "ohos.permission.INTERNET"

    • "reason": "$string:network_permission_reason"
    • "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
  • "name" : "ohos.permission.GET_NETWORK_INFO"

    • "reason": "$string:network_permission_reason"
    • "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
  • "name" : "ohos.permission.APPROXIMATELY_LOCATION"

    • "reason": "$string:location_permission_reason"
    • "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
  • "name" : "ohos.permission.LOCATION"

    • "reason": "$string:location_permission_reason"
    • "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
  • "name" : "ohos.permission.LOCATION_IN_BACKGROUND"

    • "reason": "$string:location_permission_reason"
    • "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
  • "name" : "ohos.permission.READ_MEDIA"

    • "reason": "$string:media_access_permission_reason"
    • "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
  • "name" : "ohos.permission.WRITE_MEDIA"

    • "reason": "$string:media_access_permission_reason"
    • "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
  • "name" : "ohos.permission.ACCESS_NOTIFICATION_POLICY"

    • "reason": "$string:media_access_permission_reason"
    • "usedScene": { "abilities": ["EntryAbility"], "when": "always" }

请问楼主这个问题解决了吗,如何解决的呢?我也出现了这个问题,使用

requestPermissionsFromUser()方法,但是并没有出现授权弹窗,目前我是使用的API9,并且基于arkts语法。

怀疑跟这个权限有关,去掉后可以弹窗

"name": "ohos.permission.LOCATION_IN_BACKGROUND",

但后台定位权限需要申请怎么办呢?

我去掉这个也没有弹窗,只能手动加动态授权弹窗,不知道怎么搞,

回复的格式真是太不友好了,重新发一个

```bash
"requestPermissions": [
  {
    "name" : "ohos.permission.INTERNET",
    "reason": "${string}:network_permission_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  },
  {
    "name" : "ohos.permission.GET_NETWORK_INFO",
    "reason": "${string}:network_permission_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  },
  {
    "name" : "ohos.permission.APPROXIMATELY_LOCATION",
    "reason": "${string}:location_permission_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  },
  {
    "name" : "ohos.permission.LOCATION",
    "reason": "${string}:location_permission_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  },
  {
    "name" : "ohos.permission.LOCATION_IN_BACKGROUND",
    "reason": "${string}:location_permission_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  },
  {
    "name" : "ohos.permission.READ_MEDIA",
    "reason": "${string}:media_access_permission_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  },
  {
    "name" : "ohos.permission.WRITE_MEDIA",
    "reason": "${string}:media_access_permission_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  },
  {
    "name" : "ohos.permission.ACCESS_NOTIFICATION_POLICY",
    "reason": "${string}:media_access_permission_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  }
]

在HarmonyOS鸿蒙Next中,应用无法自动弹窗且权限申请失败,可能是由于以下原因:

  1. 权限声明缺失:在config.json文件中未正确声明所需权限。例如,如果需要访问位置信息,应在config.json中声明ohos.permission.LOCATION权限。

  2. 权限申请时机不当:权限申请应在应用启动后的合适时机进行,通常在onStartonActive生命周期方法中。如果权限申请过早或过晚,可能导致弹窗无法正常显示。

  3. 权限申请方式错误:使用requestPermissionsFromUser方法申请权限时,需确保传入的权限数组正确,并且调用时机合适。例如:

    let permissions: Array<string> = ['ohos.permission.LOCATION'];
    requestPermissionsFromUser(permissions).then((data) => {
        console.log('Permission request result:', data);
    }).catch((error) => {
        console.error('Permission request failed:', error);
    });
    
  4. 系统权限设置:用户可能在系统设置中手动关闭了应用的权限,导致权限申请失败。需引导用户检查系统设置中的权限管理。

  5. 设备兼容性问题:某些设备可能对权限申请的处理方式不同,导致弹窗无法正常显示。需在不同设备上进行测试,确保兼容性。

  6. 应用签名问题:如果应用未正确签名,可能导致权限申请失败。需确保应用已正确签名并安装。

  7. 系统版本问题:鸿蒙Next版本可能存在权限管理机制的差异,需确认应用在目标系统版本上的兼容性。

检查以上问题后,重新测试应用权限申请功能。

在HarmonyOS鸿蒙Next中,应用无法自动弹窗且权限申请失败,可能原因包括:

  1. 未在config.json中正确声明所需权限;

  2. 未在代码中调用requestPermissionsFromUser方法;

  3. 设备设置中禁用了相关权限。

请检查权限声明、调用逻辑及设备设置,确保权限申请流程正确执行。

回到顶部