【发布时间】:2022-07-17 06:11:01
【问题描述】:
Wear OS 磁贴示例很棒,不是什么大问题,而是如何启动播放在主应用程序中选择的歌曲的后台媒体服务,当我每次尝试启动服务时,我都会收到以下错误.没有 UI 线程可供参考,文档只有 onclick、LoadAction 和 LaunchAction 的方法。
override fun onTileRequest(request: TileRequest) = serviceScope.future {
when(request.state!!.lastClickableId){
"play"-> playClicked()
}....
suspend fun playClicked(){
try {
// Convert the asynchronous callback to a suspending coroutine
suspendCancellableCoroutine<Unit> { cont ->
mMediaBrowserCompat = MediaBrowserCompat(
applicationContext, ComponentName(applicationContext, MusicService::class.java),
mMediaBrowserCompatConnectionCallback, null
)
mMediaBrowserCompat!!.connect()
}
}catch (e:Exception){
e.printStackTrace()
} finally {
mMediaBrowserCompat!!.disconnect()
}
}
错误
java.lang.RuntimeException: Can't create handler inside thread Thread[DefaultDispatcher-worker-1,5,main] that has not called Looper.prepare()
【问题讨论】:
-
确切的堆栈跟踪是什么?
-
这个样本是不是比较全?是否有可能因为您没有调用 cont.completeResume() 并且还在调用 cont.invokeOnCancellation 而挂起?
标签: kotlin media wear-os wear-os-tiles