Tob*_*aut 6 android kotlin youtubeplayer android-jetpack-compose
介绍
我是 Jetpack Compose 的新手,对我来说,在第一次尝试时理解或让所有内容都正确并不容易。
这就是为什么我喜欢查看其他人的开源工作以更好地理解该主题。
问题
我当前的问题是我必须将 YouTube 视频嵌入到我的应用程序中。起初,我以为我使用的是嵌入式 Web 视图,但是嘿,我是本机应用程序开发人员,让我们以本机方式来做吧!
但我跌倒了很多
这就是为什么如果你们中有人能指出正确的方向,让我的小型自学应用程序取得任何进展,那就太棒了。
小智 14
最简单的方法是首先在 gradle 文件中添加这一行
"implementation" ("com.pierfrancescosoffritti.androidyoutubeplayer:core:11.1.0")
Run Code Online (Sandbox Code Playgroud)
@Composable
fun YoutubeScreen(
videoId: String,
modifier: Modifier
) {
val ctx = LocalContext.current
AndroidView(factory = {
var view = YouTubePlayerView(it)
val fragment = view.addYouTubePlayerListener(
object : AbstractYouTubePlayerListener() {
override fun onReady(youTubePlayer: YouTubePlayer) {
super.onReady(youTubePlayer)
youTubePlayer.loadVideo(videoId, 0f)
}
}
)
view
})
}
Run Code Online (Sandbox Code Playgroud)
答案如下:
正如官方页面所说,是的,你必须下载一个 JAR。
是的,但没有必要。您可以使用AndroidView可组合函数来包装YouTubePlayerFragment并播放视频。
但在这里你需要做一个小修改,因为YouTubePlayerFragment不从 延伸androidx.fragment.app.Fragment。因此,您将需要以下内容:
2.1 创建一个YoutubePlayerFragment使用androidx. 您可以复制此要点。
2.2 然后,您可以在您的可组合项中使用它...
@Composable
fun YoutubeScreen() {
val ctx = LocalContext.current
AndroidView(factory = {
val fm = (ctx as AppCompatActivity).supportFragmentManager
val view = FragmentContainerView(it).apply {
id = R.id.fragment_container_view_tag
}
val fragment = YouTubePlayerSupportFragmentXKt().apply {
initialize("YoutubeApiKey",
object : YouTubePlayer.OnInitializedListener {
override fun onInitializationFailure(
provider: YouTubePlayer.Provider,
result: YouTubeInitializationResult
) {
Toast.makeText(
context,
"Error playing video",
Toast.LENGTH_SHORT
).show()
}
override fun onInitializationSuccess(
provider: YouTubePlayer.Provider,
player: YouTubePlayer,
wasRestored: Boolean
) {
if (!wasRestored) {
player.cueVideo("YoutubeVideoId")
}
}
})
}
fm.commit {
setReorderingAllowed(true)
add(R.id.fragment_container_view_tag, fragment)
}
view
})
}
Run Code Online (Sandbox Code Playgroud)
对于commit上面的函数,您将需要以下依赖项:
implementation "androidx.fragment:fragment-ktx:$fragment_ktx_version"
Run Code Online (Sandbox Code Playgroud)
然后将其添加到您的AndroidManifest.xml
implementation "androidx.fragment:fragment-ktx:$fragment_ktx_version"
Run Code Online (Sandbox Code Playgroud)
我测试了上面的代码并且它有效,但也许您需要更多的工作来处理方向更改。
据我所知,我在#1中提到过,不,没有。
这不是一个问题:)
| 归档时间: |
|
| 查看次数: |
4776 次 |
| 最近记录: |