HarmonyOS 鸿蒙Next中怎么模拟正式环境的权限环境

HarmonyOS 鸿蒙Next中怎么模拟正式环境的权限环境

是这样的,我想监听用户截屏事件,并获取截屏后的图片 这里有2种方法,一种是监听相册内容的变化,这种可以获取到图片,但无法准确的识别是否截屏行为产生的

let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
phAccessHelper.registerChange(photoAccessHelper.DefaultChangeUri.DEFAULT_PHOTO_URI, true, (changeData: photoAccessHelper.ChangeData) => {

  switch (changeData.type) {
    case photoAccessHelper.NotifyType.NOTIFY_ADD:
      console.log('相册内容-增加:', JSON.stringify(changeData));
      break;
    case photoAccessHelper.NotifyType.NOTIFY_REMOVE:
      console.log('相册内容-删除:', JSON.stringify(changeData));
      break;
    case photoAccessHelper.NotifyType.NOTIFY_UPDATE:
      console.log('相册内容-更新:', JSON.stringify(changeData));
      break;
    default:
      console.log('相册内容变化:', JSON.stringify(changeData));
      break;
  }
  // 触发UI更新逻辑
}
);

另外一种是真正监听截屏事件,这种监听准确,但无法获取到图片内容

try {
  let uiAbilityContext = context as common.UIAbilityContext;
  uiAbilityContext?.windowStage.getMainWindowSync().on('screenshot', () => {
    console.info('相册内容-screenshot happened');
  });
} catch (exception) {
  console.error(`Failed to register callback. Cause code: ${exception.code}, message: ${exception.message}`);
}

这里我有2个疑问:

  1. 上面2种方法各有不足,怎么准确的监听截屏并获取到对应的图片;是2种结合起来还是其他的方法
  2. 我看AI有提示要申请权限,如相册读取权限等"ohos.permission.READ_IMAGEVIDEO" 但是我实际测试,没有申请权限,上面的方法也能正常工作; 后面又了解了下,可能是我用的自动生成的调试证书,这种环境比较宽松,所以不检查; 于是我换成手动申请的内部测试证书测试,也是不需要权限方法可以直接工作的;最后还换成了正式证书,不过正式证书无法安装,发布前无法验证…

所以想问下上面的2个方法是否需要申请权限;需要的话,在发布前怎么模拟正式环境的权限要求,现在是不申请也能调用,无法比较好的验证


更多关于HarmonyOS 鸿蒙Next中怎么模拟正式环境的权限环境的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

弹窗授权只会提醒一次 可以在授权逻辑中判断授权返回状态 未授权时让系统自动拉起二次授权,

更多关于HarmonyOS 鸿蒙Next中怎么模拟正式环境的权限环境的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


检查一下app是否已经获取了相应的权限,如果获取了,关闭权限,就可以再次弹窗。

在HarmonyOS Next中模拟正式环境权限操作步骤:

  1. 使用DevEco Studio 3.1及以上版本

  2. 在项目的"module.json5"配置文件中声明所需权限

  3. 通过ohos.permission.GRANT_SENSITIVE_PERMISSIONS权限组设置敏感权限

  4. 在Previewer或模拟器中启用"Enable permission verification"选项

  5. 使用hdc命令动态授权:hdc shell aa grant <package> <permission>

  6. 调试时可通过AbilityContext.requestPermissionsFromUser()触发权限申请流程,

在HarmonyOS Next中,监听截屏并获取图片的最佳实践是将两种方法结合使用:

  1. 首先通过window.on('screenshot')准确捕获截屏事件
  2. 在截屏事件触发后,立即通过photoAccessHelper获取最新添加的图片(可通过文件创建时间筛选)

关于权限问题:

  • 读取相册内容确实需要ohos.permission.READ_IMAGEVIDEO权限
  • 调试环境可能默认授予了权限,但正式环境会严格检查

模拟正式环境权限验证的方法:

  1. config.json中明确定义所需权限
  2. 使用真机调试时,手动前往设置-应用管理-权限管理,撤销相关权限进行测试
  3. 使用DevEco Studio的"Apply for Permissions"功能模拟权限拒绝场景

建议在代码中添加权限检查逻辑:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let atManager = abilityAccessCtrl.createAtManager();
try {
  atManager.verifyAccessToken('ohos.permission.READ_IMAGEVIDEO').then((result) => {
    if(result == 0) {
      // 有权限的逻辑
    } else {
      // 无权限处理
    }
  });
} catch(err) {
  console.error(`check permission failed, code: ${err.code}, message: ${err.message}`);
}
回到顶部