基础权限
一直以来,Android在权限上面做了很多变化,并且有逐步收紧的态势。包括国内各大厂商也是绞尽脑汁限制APP申请各类权限。Android权限一直以来都被滥用、或者非法利用,导致用户权益严重受损,甚至财产安全也得不到保证。DeekeScript作为RPA领域的后来者,也深知保护用户的隐私的重要性,同时大量的权限申请也会严重影响用户体验,基于此两方面。我们只提供尽可能少的权限!
DeekeScript权限主要划分为2种,一种是必须用户授权的权限(这类权限通常不需要开发者进行判断,框架内部会自动判断是否开启,未开启则提示用户开启);另外一类则是可选权限(根据需要提醒用户是否授权),比如图色识别,这类权限需要开发者进行判断,如果代码执行需要开启但是未开启则提醒用户开启。
无障碍权限
重要等级:必须
无障碍权限是DeekeScript必须权限,因为DeekeScript是基于无障碍应用,因此用户必须开启。无需开发者提醒用户开启。用户运行对应任务的时候,系统会自动提醒用户开启
悬浮窗权限
重要等级:必须
悬浮窗权限是DeekeScript必须权限,悬浮窗权限主要有5个作用:一是展示当前任务运行时间、二是作为关闭任务的开关(双击两次,间隔2-5秒)、三是保持屏幕常亮、四是后台启动其他APP应用、五是后台弹出弹窗。无需开发者提醒用户开启。
后台弹窗权限
重要程度:可选
后台弹窗权限在一些机型是必须的,否则可能无法从后台打开其他APP应用
if(!Access.isBackgroundAlertEnabled()){
Dialogs.confirm('温馨提示', '请开启后台弹窗权限', (result) => {
Access.openBackgroundAlertSetting();
System.exit();//关闭当前任务
});
}图色权限
重要程度:可选
如果需要使用图片比对、查找,颜色查找、比对等功能,就需要开启此权限
if(!Access.isMediaProjectionEnable()){
Dialogs.confirm('温馨提示', '请开启屏幕截图权限', (result) => {
Access.openMediaProjectionSetting();
System.exit();//关闭当前任务
});
}是否开启通知权限
重要程度:可选
let hasAccess = Access.hasNotificationAccess();
console.log('是否有通知读取权限', hasAccess);
if (!hasAccess) {
Access.requestNotificationAccess();
System.exit();
}媒体权限
重要程度:可选
如果需要访问相册、视频、音频、下载文件、文档等媒体文件,需要申请媒体权限。媒体权限会根据Android版本自动请求相应的权限:
- Android 13+: 请求 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO
- Android 10-12: 请求 READ_EXTERNAL_STORAGE
- Android 9-: 请求 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE
检查媒体权限
javascript
// 检查是否有媒体读取权限
let hasPermission = Access.hasMediaReadPermission();
console.log('是否有媒体权限', hasPermission);申请媒体权限
javascript
// 检查权限是否被永久拒绝(用户选择了"不再询问")
if (Access.isMediaPermissionPermanentlyDenied()) {
// 权限被永久拒绝,需要引导用户去设置页面手动开启
Dialogs.show('提示', '需要媒体权限才能继续,请在设置中开启');
Access.openPermissionSettings(); // 打开应用权限设置页面
System.exit();
} else {
// 正常请求权限
Access.requestMediaPermissions();
}打开权限设置页面
javascript
// 打开应用权限设置页面,用户可以手动开启权限
Access.openPermissionSettings();文件权限
javascript
//判断是否有文件读写权限
if (!Access.hasStoragePermission()) {
console.log('没有权限');
if (Access.isStoragePermissionPermanentlyDenied()) {
console.log('禁止了权限');
Access.openPermissionSettings();//永久禁止,需要用户进入当前设置页手动打开
} else {
Access.requestStoragePermission();//请求权限
console.log('请求权限');
}
} else {
console.log('有权限');
}