stellar 中文文档 下载 App

初始化与三个监听器:服务连接、断开与授权结果

接入的核心节奏是「感知服务 → 检查权限 → 申请授权 → 使用 API」。三个监听器分别对应服务连接、断开与授权结果三种事件。

注册监听器

在 Activity 或 Application 中注册:

private val binderReceivedListener = Stellar.OnBinderReceivedListener {
    // 服务已连接,可以开始检查权限或使用 API
}
private val binderDeadListener = Stellar.OnBinderDeadListener {
    // 服务断开,更新 UI 状态
}
private val permissionResultListener =
    Stellar.OnRequestPermissionResultListener { requestCode, allowed, onetime ->
        if (allowed) {
            // 权限已授予;onetime 标志说明这是一次性授权
        } else {
            // 权限被拒绝,提示用户
        }
    }

生命周期内添加与移除

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    Stellar.addBinderReceivedListenerSticky(binderReceivedListener)
    Stellar.addBinderDeadListener(binderDeadListener)
    Stellar.addRequestPermissionResultListener(permissionResultListener)
}
override fun onDestroy() {
    super.onDestroy()
    Stellar.removeBinderReceivedListener(binderReceivedListener)
    Stellar.removeBinderDeadListener(binderDeadListener)
    Stellar.removeRequestPermissionResultListener(permissionResultListener)
}

Sticky 版本的意义

addBinderReceivedListenerSticky 与普通版本的区别:如果服务已经连接,注册后会立即触发一次回调;普通版本只等后续事件。初始化场景几乎总是该用 Sticky 版本——否则可能错过已建立的服务连接。

权限回调里的一次性授权标志

回调参数中的 onetime 告诉应用本次拿到的是不是一次性授权——这是相对 Shizuku 的增强点,应用可据此提示用户「重启服务后需重新授权」。授权模式见永久与一次性。

同 UID 多进程注意

旧版本存在同 UID 多进程客户端互相覆盖、回调丢失的问题,v1.0.18 已修复。多进程应用务必使用较新版本的管理器验证回调行为。