【HarmonyOS应用开发】【HCIA认证】模拟题每日1练(第8题)

 

选项A,权限GET_DISTRIBUTED_DEVICE_INFO用于获取分布式组网内的设备列表和设备信息。

选项B,权限DISTRIBUTED_DEVICE_STATE_CHANGE用于获取分布式组网内设备的状态变化。

选项C,权限GET_BUNDLE_INFO用于查询其他应用的信息。

选项A、B、C这3个权限都为非敏感权限。非敏感权限不涉及用户的敏感数据或危险操作,仅需在config.json中申请,应用安装后即被系统授权。

选项D,权限DISTRIBUTED_DATASYNC用于不同设备间的数据交换。该权限为敏感权限。敏感权限涉及用户的敏感数据或危险操作,除了在config.json中申请之外,还需要在代码中动态申请,通过运行时发送弹窗的方式请求用户授权。

所以,这道题的答案是A、B、C。

在config.json中,A、B、C、D对应的权限全都需要通过"reqPermissions"进行申请。在MainAbility的回调方法onStart()中,还必须动态申请config.json中的敏感权限。如下所示:

public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());

        // 将所有要动态申请的权限存放在一个字符串数组中
        String[] permissions = {
                "ohos.permission.DISTRIBUTED_DATASYNC"};
        // 初始化可以动态申请权限的列表
        List<String> canRequestPermissions = new ArrayList<>();
        // 遍历所有要动态申请的权限
        for (String permission : permissions) {
            // 如果当前应用没有被用户授予指定的权限
            if (verifySelfPermission(permission) != IBundleManager.PERMISSION_GRANTED) {
                // 如果可以动态申请指定的权限
                if (canRequestPermission(permission)) {
                    // 将指定的权限添加到可以动态申请权限的列表中
                    canRequestPermissions.add(permission);
                }
            }
        }
        // 通过运行时发送弹窗的方式请求用户授予指定的权限
        requestPermissionsFromUser(
                canRequestPermissions.toArray(new String[0]), 0);
    }
}

将所有要动态申请的权限存放在一个字符串数组中,然后遍历该数组。对于遍历过程中的当前迭代权限permission,如果当前应用没有被用户授予该权限,再进行判断,如果可以动态申请该权限,那么就将该权限添加到一个列表中,这需要在for循环之前构造一个列表。如果不可动态申请该权限,说明已被用户或系统禁止授权。

for循环结束后,调用方法requestPermissionsFromUser(),通过运行时发送弹窗的方式请求用户授予指定的权限,传入的第一个参数,是列表canRequestPermissions对应的数组;传入的第二个参数,是一个非负的整数,表示请求码,我们指定为0。

运行工程,弹出一个对话框,询问用户是否允许使用多设备协同,也就是通过运行时发送弹窗的方式请求用户授权。如下图所示:

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

刘玥de技术分享

您的打赏鼓励是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值