快速开始

本页以下载进度为例,演示从添加 SDK 到在星河岛上显示、更新与结束一张进度卡片的完整过程。

第一步:添加 SDK

从下载页获取 astraisland-sdk-0.1.2.aar,放入应用模块的 libs 目录,并在应用模块的 build.gradle.kts 中添加依赖:

dependencies {
    implementation(files("libs/astraisland-sdk-0.1.2.aar"))
}

纯 Java 工程还需添加 Kotlin 标准库:

implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.20")
清单无需手动修改。构建时自动合并发送权限与宿主查询声明;发送权限为普通权限,安装时即授予,不弹出授权窗口。

第二步:连接星河岛

创建 IslandClient,设置回调后连接。状态变为 READY 后即可发送内容。

val client = IslandClient(context)
client.setCallback(object : IslandCallback() {
    override fun onStateChanged(state: IslandClient.State) {
        if (state == IslandClient.State.READY) {
            // 已连接,可以显示内容
        }
    }
    override fun onAction(activityId: String, actionId: String) {
        // 处理按钮点按
    }
})
client.connect()

设备未安装可用的星流时,状态为 NOT_INSTALLED,应用照常运行,不受影响。

第三步:显示内容

一条内容由胶囊与卡片组成。以下代码显示一条下载进度:胶囊左侧为下载符号、右侧为进度环;卡片使用进度模板,并带一个「暂停下载」按钮。

fun showDownload(client: IslandClient, percent: Int): IslandResult {
    val fraction = percent / 100f
    val capsule = Capsule.Builder(IslandImage.symbol(BuiltinSymbol.DOWNLOAD))
        .setTrailing(CapsuleTrailing.progress(fraction))
        .build()
    val card = ProgressCard.Builder("正在下载离线地图")
        .setSubtitle("剩余约 2 分钟")
        .setProgress(fraction)
        .addButton(TextButton("pause_download", "暂停下载"))
        .build()
    val activity = IslandActivity.Builder("download-map", capsule, card)
        .setAccentColor(0xFF0A84FF.toInt())
        .build()
    return client.start(activity)
}
线程start()、update()、end()、endAll() 与 listMine() 会等待星河岛处理完毕后返回,请在后台线程调用。所有回调均在主线程执行。

第四步:更新内容

进度变化时,以同一内容编号(此例为 download-map)再次提交即可。同一编号的提交是整份替换,星河岛只对变化的部分执行过渡动画。

showDownload(client, 64)   // 与首次调用使用同一内容编号

每个应用每秒最多提交 10 次,请在进度有明显变化时再更新。

第五步:结束内容

下载完成后结束内容,并在胶囊上显示一句收尾:

client.end("download-map", Outro(true, "下载完成"))

收尾以对勾或叉号加一句话显示约 1.6 秒后消失。应用退出前可调用 disconnect(),断开连接并结束本应用的全部内容。

下一步