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

【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。

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

  名医百科医学知识库