android - 如何将 YouTube Android Player API 与 AppCompatActivity 一起使用
问题描述
为了在我的应用中播放视频,我决定扩展 YouTube Android Player API。但问题是我的菜单消失了,因为我没有从 AppCompatActivity 扩展。问题是:如何使用 YouTube Android Player API 并在应用程序中有菜单?
public class TutorialsActivity extends YouTubeBaseActivity {
private YouTubePlayerView youTubePlayerView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.youtube);
youTubePlayerView = (YouTubePlayerView) findViewById(R.id.video1);
youTubePlayerView.initialize(API_KEY, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
youTubePlayer.loadVideo("c9q88492aas");
youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.MINIMAL);
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
}
});
}
XML
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/video1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
当我从 AppCompatActivity 扩展时,它只会给我一个错误。
错误日志:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hyber.app/com.hyber.app.TutorialsActivity}: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class com.google.android.youtube.player.YouTubePlayerView
解决方案
使用 YouTubePlayerFragment 而不是使用 YouTubePlayerView。正如文档所说:- YouTubePlayerFragment 是一个包含 YouTubePlayerView 的片段。使用此片段是播放 YouTube 视频的首选方式,因为您的活动不需要扩展库提供的活动,就像直接使用 YouTubePlayerView 一样。
在此处查找更多信息
活动代码:-
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerFragment;
public class MainActivity extends AppCompatActivity implements YouTubePlayer.OnInitializedListener {
private static final int RECOVERY_DIALOG_REQUEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
YouTubePlayerFragment youTubePlayerFragment =
(YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment);
youTubePlayerFragment.initialize("api key",
this);
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {
if (!wasRestored) {
youTubePlayer.cueVideo("nCgQDjiotG0");
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
if (youTubeInitializationResult.isUserRecoverableError()) {
youTubeInitializationResult.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
} else {
String errorMessage = String.format("There was an error initializing the YouTubePlayer (%1$s)", youTubeInitializationResult.toString());
Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
}
}
}
布局:-
<fragment
android:id="@+id/youtube_fragment"
android:name="com.google.android.youtube.player.YouTubePlayerFragment"
android:layout_width="0dp"
android:layout_height="300dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
推荐阅读
- arrays - 最坏情况下的大 omega(n) 是什么意思?
- node.js - npx create-express-api 不断收到未知错误
- kubernetes - Kubernetes pvc 请求和物理存储
- android - Apps 脚本无法通过 Flutter App APK 访问
- c# - 如何使用服务器端 ASP.NET Core 3.1 MVC 访问浏览器的本地存储
- r - 预处理数据后如何在 tidymodels R 中进行预测
- java - 替换正则表达式组 JAVA
- unity3d - 通过 Unity 中的代码使用 Anchor Presets 设置 GameObject 的位置
- react-native - 如何在本机反应中获得 Orientation.lock 状态
- html - 不安全的内容