Jetpack compose:无法使用 Youtube API
Posted
技术标签:
【中文标题】Jetpack compose:无法使用 Youtube API【英文标题】:Jetpack compose: Can't use Youtube API 【发布时间】:2021-11-19 14:21:36 【问题描述】:我正在研究一天,但没有得到任何关于使用 jetpack compose 的 youtube API 的参考。是否可以在 jetpack compose 上使用它,或者有没有其他方法可以使用 jetpack compose 播放 youtube 视频?请帮帮我
【问题讨论】:
您尝试了什么,遇到了什么问题?例如,您是否try usingandroidView
?
我找到了有关如何使用 jetpack compose 播放视频的教程。我想你可以使用它。 itnext.io/playing-a-video-with-jetpack-compose-10a453ff956
@CommonsWare 我做到了,但它抛出了一个错误,提示“只能使用扩展 YouTubeBaseActivity 作为其上下文的 Activity 创建 YouTubePlayerView。”
您的活动是否扩展YouTubeBaseActivity
?
@Tanjimahmed 请在您的问题中添加所有信息,如已阅读,没有足够的信息用于调试、研究或做任何帮助。
【参考方案1】:
确实,很棘手。
你不能使用 YouTubeBaseActivity,意味着你不能使用 YouTubePlayerView。此视图创建为仅在一种活动类型中工作,而不是为您的片段/组合架构创建的。
您不能使用 YouTubePlayerFragment,因为它的父源来自已弃用的 android.app 包,您将无法在花哨的撰写活动中获取旧的 fragmentManager。
您可以并且必须将 YouTubePlayerSupportFragment 与撰写活动片段管理器(它是 androidx.fragment.app.FragmentManager 的实例)一起使用。
以下代码在我这边运行良好,试试看:
@Composable
fun ComposeYoutube(
modifier: Modifier,
playList: List<String>,
supportFragmentManager: FragmentManager,
onError: (String) -> Unit
)
AndroidView(
modifier = modifier,
factory =
var player: YouTubePlayer? = null
val onPlaylistChangeListener = object : YouTubePlayer.PlaylistEventListener
override fun onPlaylistEnded()
override fun onPrevious()
override fun onNext()
val youtubeApiInitializedListener = object : YouTubePlayer.OnInitializedListener
override fun onInitializationSuccess(p0: YouTubePlayer.Provider?, p1: YouTubePlayer?, p2: Boolean)
player = p1
player?.setPlaylistEventListener(onPlaylistChangeListener)
player?.loadVideos(playList)
override fun onInitializationFailure(p0: YouTubePlayer.Provider?, p1: YouTubeInitializationResult?)
onError("TODO")
FrameLayout(it).apply
// select any R.id.X from your project, it does not matter what it is, but container must have one for transaction below.
id = R.id.tv_id
val youtubeView = YouTubePlayerSupportFragment()
supportFragmentManager
.beginTransaction()
.add(
R.id.tv_id,
youtubeView,
null
)
.commit()
youtubeView.initialize(BuildConfig.youtubeApi, youtubeApiInitializedListener)
,
update =
)
【讨论】:
以上是关于Jetpack compose:无法使用 Youtube API的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试使用 jetpack compose 在 Android 中设置背景图像,但图像无法填满整个页面
Jetpack compose 更新到 1.0.0-rc01 后无法预览
如何使用 Jetpack Compose 使 LinearProgressIndicator 宽度动态化