快速开始
本页以下载进度为例,演示从添加 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(),断开连接并结束本应用的全部内容。