问题描述
我正在尝试在我的应用中安装 YouTube 播放器。
应用程序不断崩溃,因为我需要在 MainActivity 中将“extends AppCompatActivity”更改为“YouTubeBaseActivity”,但我有使用 AppCompatActivity 的代码,因此我无法更改它。
我将代码移到了 YouTubeConfig.Java,它看起来像这样:
public class YouTubeConfig extends YouTubeBaseActivity {
public YouTubeConfig() {}
private static final String API_KEY = "-";
public static String getApiKey() {
return API_KEY;
}
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
*Code that plays the video. No errors*
}
但是当我启动应用程序时,它由于 live_fragment.xml 的代码而崩溃:
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_live,container,false);
}
live_fragment 链接到 mainActivity 代码:
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.nav_live:
selectedFragment = new LiveFragment();
break;
case R.id.nav_articles:
selectedFragment = new ArticlesFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
return true;
}
};
这是摘自关于底部导航的 YT 视频
解决方法
使用 YouTubePlayerFragment 而不是使用 YouTubePlayerView。正如文档所说:- YouTubePlayerFragment 是包含 YouTubePlayerView 的片段。使用此片段是播放 YouTube 视频的首选方式,因为您的 Activity 不需要扩展库提供的 Activity,就像直接使用 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" />
已编辑!你可以用这个
public class PlayVideo extends YouTubeBaseActivity implements
YouTubePlayer.OnInitializedListener {
private YouTubePlayer YPlayer;
private static final String YoutubeDeveloperKey = "Your Key";
private static final int RECOVERY_DIALOG_REQUEST = 1;
//String film = "http://www.youtube.com/watch?v=0C0pk9fAhwA";
public static final String VIDEO_ID = "0C0pk9fAhwA";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutplayyoutube);
YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
youTubeView.initialize(YoutubeDeveloperKey,this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,YouTubeInitializationResult errorReason) {
if (errorReason.isUserRecoverableError()) {
errorReason.getErrorDialog(this,RECOVERY_DIALOG_REQUEST).show();
} else {
String errorMessage = String.format(
"There was an error initializing the YouTubePlayer",errorReason.toString());
Toast.makeText(this,Toast.LENGTH_LONG).show();
}
}
@Override
public void onInitializationSuccess(Provider provider,YouTubePlayer player,boolean wasRestored) {
if (!wasRestored) {
YPlayer = player;
/*
* Now that this variable YPlayer is global you can access it
* throughout the activity,and perform all the player actions like
* play,pause and seeking to a position by code.
*/
YPlayer.cueVideo(VIDEO_ID);
}
}
}