【鸿蒙应用开发】【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。
运行工程,弹出一个对话框,询问用户是否允许使用多设备协同,也就是通过运行时发送弹窗的方式请求用户授权。如下图所示:
向大家推荐由我的教学团队开发的视频课程《鸿蒙应用开发HCIA认证超细致精讲》: