权限 API 全表:检查、申请、远程权限与权限列表
用户侧在授权页点「允许」之前,应用侧要先把状态查清、把申请发对。这一页汇总权限相关的全部接口。
核心三件套
// 检查权限是否已授予(默认检查 "stellar" 权限)
Stellar.checkSelfPermission(): Boolean
// 发起权限申请,用户会在管理器侧看到弹窗
Stellar.requestPermission(requestCode = 1)
// 是否应向用户解释权限用途(引导提示用)
Stellar.shouldShowRequestPermissionRationale(): Boolean
标准调用顺序:pingBinder() 确认服务在 → checkSelfPermission() 查状态 → 未授权则 requestPermission(),结果经回调返回(见初始化与监听器)。
远程权限:查服务自己有什么
服务以 shell 或 root 身份运行,它能代行使哪些系统权限是另一回事:
// 检查 Stellar 服务自身是否拥有指定权限
val result = Stellar.checkRemotePermission("android.permission.WRITE_SECURE_SETTINGS")
// result == PackageManager.PERMISSION_GRANTED 表示已授予
典型用途:应用依赖某项系统权限(如 READ_LOGS、DUMP)前,先确认服务身份是否携带,避免运行期失败。降权激活会收窄这层能力,见Root 启动与降权激活。
权限列表与细分权限
// 当前服务版本支持的全部权限项
Stellar.supportedPermissions: Array<String>
返回值里能看到 stellar、follow_stellar_startup 等权限项,与用户侧授权页展示的细分权限一一对应,概念见细分权限。
常见坑
- 申请了没反应:检查应用是否真的跳转/弹窗被系统拦截,让用户到授权页手动放行,管理器侧有被跳转快速授权兜底;
- 权限结果对不上:旧版本存在权限请求结果被归到错误权限的问题,v1.0.18 已修复;
- 状态缓存:授权状态随时可能被用户改掉,关键操作前实时调用
checkSelfPermission(),不要缓存结论。