当用户选择全屏观看时,YouTube Player支持片段崩溃

问题描述 投票:0回答:2

我已经在自己的片段中而不是在活动中实现了YouTubePlayerSupportFragment API。视频确实可以正常播放,但是当用户从YouTube提供的媒体控件中选择以全屏方式查看视频时,该应用程序将变为横向,显示黑色加载屏幕,然后立即崩溃。

ExpandedItem.layout

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 <LinearLayout
    android:id="@+id/youtube_layout_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/close_button">

    <fragment
        android:id="@+id/youtube_player_fragment"
        android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginEnd="10dp"
        android:layout_marginTop="15dp"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

ExpandedItemFragment.kt

import android.os.Bundle
import android.text.SpannableString
import android.text.style.BulletSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.google.android.youtube.player.YouTubeInitializationResult
import com.google.android.youtube.player.YouTubePlayer
import com.google.android.youtube.player.YouTubePlayerSupportFragment
class ExpandedItemFragment(private val hasVideo: Boolean) : Fragment(), YouTubePlayer.OnInitializedListener {
    private lateinit var mosquitoVideo: YouTubePlayerSupportFragment

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(
            R.layout.expanded_item, container, false
        )
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        initializeLayout()
    }

    private fun initializeLayout() {
        if (hasVideo) {
           youTubeLayoutContainer.visibility = View.VISIBLE
           mosquitoVideo =
              childFragmentManager.findFragmentById(R.id.youtube_player_fragment) as YouTubePlayerSupportFragment
           mosquitoVideo.initialize(getString(R.string.google_api_key), this)
        }
    }
override fun onInitializationSuccess(
        provider: YouTubePlayer.Provider,
        youTubePlayer: YouTubePlayer,
        b: Boolean
    ) {
        if (!b) {
            youTubePlayer.cueVideo("rD8SmacBUcU")
        }
    }

    override fun onInitializationFailure(
        provider: YouTubePlayer.Provider,
        youTubeInitializationResult: YouTubeInitializationResult
    ) {
        Toast.makeText(activity, "Youtube video failed to play", Toast.LENGTH_SHORT).show()
    }

[ExpandedItemFragment在视频尚未全屏显示时,它确实会正常膨胀,但是在用户选择全屏显示后,应用程序崩溃了。抛出的异常是:

Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.mosquitotracker.ExpandedItemFragment: could not find Fragment constructor 

该异常位于我的MainActivity.kt中,位于>>

super.onCreate(savedInstanceState)

我已经在自己的片段中而不是在活动中实现了YouTubePlayerSupportFragment API。视频确实可以正常播放,但是当用户选择从...

android kotlin android-youtube-api android-fullscreen
2个回答
0
投票

当用户选择将youtube视频置于全屏模式时,我的应用崩溃的原因是,YouTubePlayerSupportFragment自动旋转为横向模式。我在使片段膨胀的活动中没有正确处理配置更改,因此尝试重新膨胀该片段时出现问题,导致我的应用程序崩溃。对于有类似问题的任何人,我建议您要么手动处理配置更改,要么将android:configChanges="orientation|keyboardHidden添加到任何包含使其中的YouTubePlayerSupportFragment膨胀的片段的活动。我在问题中提供的代码适用于试图在片段而不是活动中实现YouTubePlayerSupportFragment的任何人。


-1
投票

YouTubePlayer组件不能很好地与片段配合使用,您应该仅在视频中打开活动,但是我对您的建议是在此https://github.com/PierfrancescoSoffritti/android-youtube-player使用该组件>

添加到build.grandle

© www.soinside.com 2019 - 2024. All rights reserved.