HarmonyOS 受限权限问题:ohos.permission.WRITE_IMAGEVIDEO申请该权限的时候返回的是2,拉不起系统的授权弹框。

在h5的系统权限设置页面中,调用:ohos.permission.WRITE_IMAGEVIDEO申请授权或者拉起系统权限,返回的结果码是2,在应用场景中,同样的方法,保存图片到图库,申请权限又可以拉起授权弹出框,这个已经申请过受限访问权限了的。这种拿不到正确的授权状态是什么原因

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

1、业务是否此权限的符合特殊场景与功能。

ohos.permission.WRITE_IMAGEVIDEO

允许修改用户公共目录的图片或视频文件。

可申请此权限的特殊场景与功能: 应用需要克隆、备份或同步图片/视频类文件。

其他场景下的使用方案: 使用“保存控件”保存用户图片或视频,使用方式请参考:

保存控件:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/savebutton-V5

授权方式: 用户授权(user_grant)

起始版本: 9

参考链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/restricted-permissions-V5#section1417080131712

推荐使用:安全控件的保存控件:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-savebutton-V5

ohos.permission.READ_IMAGEVIDEO:推荐使用Picker选择媒体库资源:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-photoviewpicker-V5

2、检查一下:module.json5是否配置了:

ohos.permission.WRITE_IMAGEVIDEO
"requestPermissions": [
{
  "name": 'ohos.permission.WRITE_IMAGEVIDEO',
  "reason": "$string:app_name",
  "usedScene": {
    "abilities": [
    "FormAbility"
    ],
    "when":"inuse"
  }
},
]

3、相应请求权限的结果:

  • -1:未授权,表示权限已设置,无需弹窗,需要用户在"设置"中修改。

  • 0:已授权。

  • 2:未授权,表示请求无效,可能原因有:

-未在设置文件中声明目标权限。

-权限名非法。

-部分权限存在特殊申请条件,在申请对应权限时未满足其指定的条件

参考链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-permissionrequestresult-V5

4、试一下以下demo返回的结果:

import { common, abilityAccessCtrl } from '@kit.AbilityKit';

@Entry
@Component
struct Permission {
  @State message: string = 'Hello World';
  @State userGrant: boolean = false

  async reqPermissionsFromUser(): Promise<number[]> {
    let context = getContext() as common.UIAbilityContext;
    let atManager = abilityAccessCtrl.createAtManager();
    let grantStatus = await atManager.requestPermissionsFromUser(context, ['ohos.permission.WRITE_IMAGEVIDEO']);
    return grantStatus.authResults;
  }

  // 申请权限
  async requestLocationPermission() {
    let grantStatus = await this.reqPermissionsFromUser()
    for (let i = 0; i < grantStatus.length; i++) {
      console.info(`${i} : ${grantStatus[i]}` )
      if (grantStatus[i] === 0) {
        // 用户授权,可以继续访问目标操作
        this.userGrant = true;
      }
    }
  }

  async aboutToAppear() {
    await this.requestLocationPermission();
  }

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('PermissionHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
    }.height('100%').width('100%')
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 关于ohos.permission.WRITE_IMAGEVIDEO
603浏览 • 1回复 待解决
如何申请组合授权权限
474浏览 • 1回复 待解决