当前位置: 首页 > 知识库问答 >
问题:

Jetpack compose:无法使用Youtube API

濮阳奇逸
2023-03-14

我研究了一天,但没有得到任何关于jetpack compose的youtube API的参考资料。有没有可能在jetpack compose上使用它,或者有没有其他方法可以使用jetpack Close播放youtube视频?请帮帮我

共有1个答案

艾星河
2023-03-14

确实,这是一个棘手的问题。

您不能使用YouTubeBaseActivity,这意味着您不能使用YouTubePlayerView。创建此视图是为了仅在一种活动类型内工作,而不是为片段/组合架构创建。

您不能使用YouTubePlayerFragment,因为它的父源来自 android.app 包,该包已被弃用,您将无法在花哨的作曲活动中获取旧的fractionManager。

您可以并且必须将YouTubePlayerSupportFragment与compe活动片段管理器(这是androidx.fragment.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 = { }
    )
}
 类似资料:
  • 我正在写一份GCM申请。我无法将收到的邮件设置为文本视图。 检查以下代码: (错误msg: findViewById(int)方法未定义为new Runnable(){})

  • 我刚刚开始使用Spring,我正在尝试使用@NotBlank。问题是它不起作用。pom.xml我有以下依赖项: 这是我的进口: 我也得到了这个错误: 我搜索了类似的问题,答案是,通过添加此依赖项并重新启动IDE将起作用。就我而言,它仍然不起作用。有什么建议吗?

  • 当我尝试此代码时 我收到这条信息: 警告:无法修改标头信息-标头已由/home/httpd/vhosts/your-click.ch/httpdocs/wp-includes/formatting.php:4179中的/home/httpd/vhost/your-click.ch/httpdocs/wp-includess/pluggable发送。第925行的php警告:无法修改标头信息-标头已由

  • 我正在做一个项目,我试图加载一个图像,以便将其用作纹理,但当我尝试包含stb_image时遇到了一个问题。 我把< code>stb_image.h放在< code > src/vendor/STB _ image/中,用 在文件中,并将文件放在<code>src/vendor/stb_image/</code>目录中。当我尝试包含<code>#include“vendor/stb_image/s

  • 看来我无法导入这个包:github。com/golang/protobuf/proto 当我尝试构建或使用go-get时,我得到:无法加载github。com/golang/protobuf/proto:github模块。com/golang/protobuf@latest(v1.3.2)找到,但不包含包github。com/golang/protobuf/proto 这是一个受欢迎的软件包,我很

  • 我基本上使用了install命令“$pip install Flask”,当我试图运行一个程序时,它会说“找不到模块”Flask安装在“/usr/local/lib/python2.7/site包”中,但我认为pip的意义在于,我可以到处导入这些包。我试图在我的桌面上运行一个文件,甚至当我将Flask文件夹移动到桌面上时,它也不起作用。有什么建议吗?谢谢

  • 我正在尝试使相机应用程序存储输出到我的内部存储。我还知道第三方应用程序不能访问我的应用程序的内部存储,但我们可以通过公开内部目录来做到这一点。我在这里遵循了指南: 相机意图不保存照片 https://developer.android.com/reference/android/support/v4/content/fileprovider.html 当我运行应用程序时,我可以得到以下Logcat

  • 实现“com.android.support:support-v13:28.0.0” 实现“com.android.support:design:28.0.0” 实现“com.android.support:recyclerview-v7:28.0.0”