package com.google.android.youtube.player; | |
/** | |
* Please create this directories schema com.google.android.youtube.player and post the file there | |
*/ | |
import android.os.Bundle; | |
import android.util.AttributeSet; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import androidx.fragment.app.Fragment; | |
import androidx.fragment.app.FragmentActivity; | |
import com.google.android.youtube.player.internal.ab; | |
public class YouTubePlayerSupportFragmentX extends Fragment implements YouTubePlayer.Provider { | |
private final YouTubePlayerSupportFragmentX.a a = new YouTubePlayerSupportFragmentX.a(); | |
private Bundle b; | |
private YouTubePlayerView c; | |
private String d; | |
private YouTubePlayer.OnInitializedListener e; | |
private boolean f; | |
public static YouTubePlayerSupportFragmentX newInstance() { | |
return new YouTubePlayerSupportFragmentX(); | |
} | |
public YouTubePlayerSupportFragmentX() { | |
} | |
public void initialize(String var1, YouTubePlayer.OnInitializedListener var2) { | |
this.d = ab.a(var1, "Developer key cannot be null or empty"); | |
this.e = var2; | |
this.a(); | |
} | |
private void a() { | |
if (this.c != null && this.e != null) { | |
this.c.a(this.f); | |
this.c.a(this.getActivity(), this, this.d, this.e, this.b); | |
this.b = null; | |
this.e = null; | |
} | |
} | |
public void onCreate(Bundle var1) { | |
super.onCreate(var1); | |
this.b = var1 != null ? var1.getBundle("YouTubePlayerSupportFragment.KEY_PLAYER_VIEW_STATE") : null; | |
} | |
public View onCreateView(LayoutInflater var1, ViewGroup var2, Bundle var3) { | |
this.c = new YouTubePlayerView(this.getActivity(), (AttributeSet)null, 0, this.a); | |
this.a(); | |
return this.c; | |
} | |
public void onStart() { | |
super.onStart(); | |
this.c.a(); | |
} | |
public void onResume() { | |
super.onResume(); | |
this.c.b(); | |
} | |
public void onPause() { | |
this.c.c(); | |
super.onPause(); | |
} | |
public void onSaveInstanceState(Bundle var1) { | |
super.onSaveInstanceState(var1); | |
Bundle var2 = this.c != null ? this.c.e() : this.b; | |
var1.putBundle("YouTubePlayerSupportFragment.KEY_PLAYER_VIEW_STATE", var2); | |
} | |
public void onStop() { | |
this.c.d(); | |
super.onStop(); | |
} | |
public void onDestroyView() { | |
this.c.c(this.getActivity().isFinishing()); | |
this.c = null; | |
super.onDestroyView(); | |
} | |
public void onDestroy() { | |
if (this.c != null) { | |
FragmentActivity var1 = this.getActivity(); | |
this.c.b(var1 == null || var1.isFinishing()); | |
} | |
super.onDestroy(); | |
} | |
private final class a implements YouTubePlayerView.b { | |
private a() { | |
} | |
public final void a(YouTubePlayerView var1, String var2, YouTubePlayer.OnInitializedListener var3) { | |
YouTubePlayerSupportFragmentX.this.initialize(var2, YouTubePlayerSupportFragmentX.this.e); | |
} | |
public final void a(YouTubePlayerView var1) { | |
} | |
} | |
} |
Thanks :)
here is my same issue but when i implemented the above steps im getting error
" error: b is not public in YouTubePlayerView; cannot be accessed from outside package
private final class a implements YouTubePlayerView.b {
^"
Please help...
java.lang.UnsupportedOperationException: No views can be added on top of the player
my code.
` YouTubePlayerSupportFragmentX youTubePlayerFragment = YouTubePlayerSupportFragmentX.newInstance();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.youtube_frag, youTubePlayerFragment).commit();
youTubePlayerFragment.initialize(AppConstants.YOUTUBE_API_KEY, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider arg0, YouTubePlayer youTubePlayer, boolean b) {
if (!b) {
// YPlayer = youTubePlayer;
youTubePlayer.setFullscreen(true);
youTubePlayer.loadVideo("2zNSgSzhBfM");
youTubePlayer.play();
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider arg0, YouTubeInitializationResult arg1) {
// TODO Auto-generated method stub
}
});`
<FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <fragment android:id="@+id/youtube_frag" android:name="com.google.android.youtube.player.YouTubePlayerSupportFragmentX" android:layout_width="match_parent" android:layout_height="150dp" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" /> </FrameLayout>
Getting a black screen, Video not playing.
Wow, adding YoutubePlayerFragmentX in same package name works on 10, 11 versions
Thank you
That works, are u a genius!!
Thank you so much! Saved us here after Android 11 API update.
@medyo in line 34, from where we are getting ab
in ab.a(var1, "Developer key cannot be null or empty");
. It is not defined anywhere.
@jobayer, it's imported from import com.google.android.youtube.player.internal.ab;
thanks @medyo ,
I don't believed that package folder would worked.
Thanks! it's worked nice
I made a kotlin version for this and have tested it on my projects. Feel free to comment if there is any problem https://gist.github.com/novanto/5ea09bebd683a2bbdd9c4f697b6a6b28
I made a kotlin version for this and have tested it on my projects. Feel free to comment if there is any problem https://gist.github.com/novanto/5ea09bebd683a2bbdd9c4f697b6a6b28
Awesome
Hello, first of all thank you for this awesome contribution. Recently I changed in my app the targetSdkVersion to 30 and then started to see issues. Not able to play videos using sdk 30. I returned to 29 and all works fine.
Hello, first of all thank you for this awesome contribution. Recently I changed in my app the targetSdkVersion to 30 and then started to see issues. Not able to play videos using sdk 30. I returned to 29 and all works fine.
I think the issue is related to package visibility on android 11. Just add these lines below on your manifest - below the closing </application>
tag. Read here for more info
<queries>
<intent>
<action android:name="com.google.android.youtube.api.service.START" />
</intent>
</queries>
At least give variables a meaningful name. It took me time to really understand. By the way thanks
You are genius @medyo, thanks a lot!!!
Great! Thx.
@MAkif06 you have to create the following package schema in your src
📁com
📁 google
📁 android
📁 youtube
📁 player
📄 YouTubePlayerSupportFragmentX.java
Should I transfer other files such as "YouTubeApiServiceUtil" to this schema along with this YouTubePlayerSupportFragmentX ?
@MAkif06 No, no need
@MAkif06 move the content (com.google.android... ) to the main/java
folder
Thank you very much I will try that advice.Have nice day.
Thank you very much.I solved to problem thank to your advices.Have nice day.
Hi @medyo , I'm getting an error here - " Cannot access 'a': it is package-private in 'YouTubePlayerView'", as well as "Cannot access '': it is package-private in 'YouTubePlayerView'". any thoughts on how I can resolve this?
@tscholze yes I did, thanks! Discussion here, but I think it was mainly due to making sure the new folder/package called com.google.android.youtube.player is in the root folder
https://johncodeos.com/how-to-embed-youtube-videos-into-your-android-app-using-kotlin/
thanks buddy!
Can you please help
how can we play youtube video in recyclerview only something like twitter. i dont want to start video in another activity.