应用权限管控
ArkTS
常见权限
- 允许应用查看蓝牙的配置。 ohos.permission.USE_BLUETOOTH
- 在本设备上允许应用访问通知策略。ohos.permission.ACCESS_NOTIFICATION_POLICY
- 允许应用获取数据网络信息。ohos.permission.GET_NETWORK_INFO
- 允许应用获取Wi-Fi信息。ohos.permission.GET_WIFI_INFO
- 允许应用使用相机。ohos.permission.CAMERA
- 允许应用获取设备位置信息。ohos.permission.LOCATION
- 允许应用获取设备模糊位置信息。ohos.permission.APPROXIMATELY_LOCATION
- 允许应用使用麦克风。ohos.permission.MICROPHONE
- 允许应用读取日历信息。ohos.permission.READ_CALENDAR
- 允许应用添加、移除或更改日历活动。ohos.permission.WRITE_CALENDAR
- 允许应用读取媒体库的图片与视频。ohos.permission.READ_IMAGEVIDEO或ohos.permission.WRITE_IMAGEVIDEO
- 允许应用读写媒体库的音频文件。ohos.permission.READ_AUDIO或ohos.permission.WRITE_AUDIO
- 允许应用读取剪贴板。ohos.permission.READ_PASTEBOARD
- 选择保存用户文件文档中心
封装应用权限方法
import { abilityAccessCtrl, bundleManager, common, Permissions } from '@kit.AbilityKit';
import { notificationManager } from '@kit.NotificationKit';
class PermissionManager {
// 检查是否授权
checkPermissions(permissions: Permissions[]) {
// 程序访问控制管理
const atManager = abilityAccessCtrl.createAtManager();
// 获取 bundle 信息
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
// 提取 tokenID 标识
const tokenID = bundleInfo.appInfo.accessTokenId
// 校验应用是否被授予权限
const authResults = permissions.map((item) => atManager.checkAccessTokenSync(tokenID, item))
console.log('authResults', authResults)
// 返回是否已授权结果
return authResults.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}
// 动态申请授权
async requestPermissions(permissions: Permissions[]) {
// 程序访问控制管理
const atManager = abilityAccessCtrl.createAtManager();
// 拉起弹框请求用户授权
const grantStatus = await atManager.requestPermissionsFromUser(getContext(), permissions)
console.log('grantStatus', grantStatus)
// 获取请求权限的结果
const isAuth = grantStatus.authResults.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
// 返回 Promise 授权结果
return isAuth ? Promise.resolve(true) : Promise.reject(false)
}
// 打开系统设置的权限管理页(处理授权结果)
openPermissionSettingsPage(uri: string) {
// 获取上下文
const context = getContext() as common.UIAbilityContext
// 获取包信息
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
console.log('bundleInfo', JSON.stringify(bundleInfo))
// 打开系统设置页
context.startAbility({
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri,
parameters: {
// 按照包名打开对应设置页
pushParams: {
bundleName: context.abilityInfo.bundleName//拉起方应用包名
}
}
})
}
// 应用通知权限
async requestNotificationPermission() {
try {
// 获取上下文
const context = getContext() as common.UIAbilityContext;
await notificationManager.requestEnableNotification(context);
console.info("requestEnableNotification success");
return true;
} catch (err) {
console.error(`requestEnableNotification fail: ${JSON.stringify(err)}`);
return false;
}
}
}
// 导出类的实例
export const permissionManager = new PermissionManager()
uri字段与设置页面对应表格
使用 permissionManager.openPermissionSettingsPage('systemui_notification_settings')
字段 | 拉起界面 | 手机设备是否支持 | 2in1设备是否支持 |
---|---|---|---|
/ | HOME-设置 | 是 | 是 |
wifi_entry | HOME-WLAN | 是 | 是 |
bluetooth_entry | HOME-蓝牙 | 是 | 是 |
mobile_network_entry | HOME-移动网络 | 是 | 是 |
hotspot_data_settings | HOME-移动网络-个人热点界面 | 是 | 是 |
password_entry | HOME-移动网络-个人热点-密码界面 | 是 | 是 |
connected_device_entry | HOME-移动网络-个人热点-已连接设备界面 | 是 | 是 |
more_share_entry | HOME-移动网络-个人热点-更多共享设置界面 | 是 | 是 |
more_connections_settings | HOME-更多连接 | 是 | 是 |
nfc_settings | HOME-更多连接-NFC三级页面 | 是 | 是 |
display_settings | HOME-显示和亮度 | 是 | 是 |
screen_zoom | HOME-显示和亮度-显示大小三级页面 | 是 | 是 |
screen_refresh_rate_entry | HOME-显示和亮度-屏幕刷新率三级页面 | 是 | 需看具体设备是否有刷新率选项 |
volume_settings | HOME-声音和振动 | 是 | 是 |
systemui_notification_settings | HOME-通知和状态栏 | 是 | 是 |
accessibility_feature | HOME-辅助功能 | 是 | 是 |
accessibility_operation_entry | HOME-辅助功能-辅助功能快捷键三级页面 | 是 | 是 |
accessibility_more_settings_entry | HOME-辅助功能-已安装的服务-服务详情-更多设置五级页面 | 是 | 是 |
application_and_service_settings | HOME-应用与元服务 | 是 | 是 |
application_settings | HOME-应用与服务-应用管理三级页面 | 是 | 是 |
application_info_entry | HOME-应用和元服务HOME-某个具体应用的应用信息,需传递want.parameters.pushParams为具体应用的包名 | 是 | 是 |
storage_settings | HOME-存储界面 | 是 | 是 |
battery | HOME-电池 | 是 | 是 |
biometrics_and_password_settings | HOME-生物识别和密码 | 是 | 是 |
lock_screen_password_title | HOME-生物识别和密码-设置数字锁屏密码 | 是 | 是 |
change_six_to_number_entry | HOME-生物识别和密码-锁屏密码(其他密码类型)-自定义数字密码(设置锁屏数字密码)四级页面 | 是 | 是 |
change_six_to_mixed_entry | HOME-生物识别和密码-锁屏密码(其他密码类型)-混合密码(设置锁屏密码)四级页面 | 是 | 是 |
fingerprint_settings_entry | HOME-生物识别与密码-指纹3级页面 | 是 | 需看具体设备是否支持指纹解锁能力 |
privacy_settings | HOME-隐私与安全 | 是 | 是 |
location_help_entry | HOME-隐私与安全-定位服务-帮助四级页面 | 是 | 是 |
users_accounts | HOME-用户和账户 | 是 | 是 |
current_user | HOME-用户和账户-当前登录(用户)三级页面 | 是 | 是 |
system_and_updates | HOME-系统和更新 | 是 | 是 |
time_zone_settings | HOME-系统和更新-日期时间-时区-时区选择列表 | 是 | 是 |
date_and_time | HOME-系统和更新-日期时间三级页面 | 是 | 是 |
set_input | HOME-系统和更新-输入法页面 | 是 | 是 |
set_language | HOME-系统和更新-语言和输入法-语言和输入法四级页面 | 是 | 是 |
set_language_region | HOME-系统和更新-语言和输入法-语言和地区-语言和地区5级页面 | 是 | 是 |
reset_settings | HOME-系统和更新-重置三级页面 | 是 | 是 |
developer_options_settings | HOME-系统和更新-开发人员选项三级页面 | 是 | 是 |
edit_language_entry | HOME-系统和更新-语言和输入法-语言和地区-编辑(编译语言)五级页面 | 是 | 是 |
add_language_entry | HOME-系统和更新-语言和输入法-语言和地区-添加语言五级页面 | 是 | 是 |
select_region_entry | HOME-系统和更新-语言和输入法-语言和地区-当前地区(选择地区)五级页面 | 是 | 是 |
reset_factory_settings | HOME-系统和更新-重置-恢复出厂设置四级页面 | 是 | 是 |
reset_net_settings | HOME-系统和更新-重置-还原网络设置四级页面 | 是 | 是 |
reset_confirm_settings | HOME-系统和更新-重置-恢复出厂设置-重置手机五级页面 | 是 | 是 |
reset_net_confirm_settings | HOME-系统和更新-重置-还原网络设置-还原网络设置确认五级页面 | 是 | 是 |
about_device | HOME-关于本机界面 | 是 | 是 |
device_name | HOME-关于本机-设备名称 | 是 | 是 |