【Xamarin】Youtube再生【Android】
XamarinでYoutubeをアプリ内で再生しないといけない場面があり、少し詰まったので自分のメモがてら記事にまとめてみました。
AndroidでYoutubeを再生するためにはいくつか手段がありますが、今回はYouTube Android Player APIを使用した再生方法を試しています。
YouTube Android Player APIの準備
XamarinでYouTube Android Player APIを使用する場合はBinding Java Libraryを使用します。
Xamarin公式リファレンス
1.YouTube Android Player API - DownloadよりYouTube Android Player APIのjarファイルをダウンロード
2.BindingsLibraryを作成して、ダウンロードしたjarファイルをJarsフォルダに入れる
(ビルドアクションはEmbeddedJarにする)
3./Transforms/Metadata.xmlを修正
<?xml version="1.0" encoding="UTF-8"?> <metadata> <attr path="/api/package[@name='com.google.android.youtube.player']" name="managedName">Google.YouTube.Player</attr> <remove-node path="/api/package[@name='com.google.android.youtube.player']/class[@name='YouTubeThumbnailView']/method[@name='finalize' and count(parameter)=0]" /> </metadata>
4.一度ビルドした後、実行したいプロジェクトでBindingsLibraryを参照に追加
Google Developers ConsoleでAPIキーを取得
1.GoogleDevelopersConsoleでYouTube Data API v3を有効にする
2.認証情報ページよりAPIキーを取得
パーミッションの設定
1.permissionでインターネット接続を許可
コード修正
1.Activityを修正します
using Android.App; using Android.Widget; using Android.OS; using Google.YouTube.Player; namespace YoutubeSample { [Activity(Label = "YoutubeSample", MainLauncher = true, Icon = "@mipmap/icon")] public class MainActivity : Activity,IYouTubePlayerOnInitializedListener { private static int RECOVERY_DIALOG_REQUEST = 1; private readonly string ApiKey = ""; private readonly string VideoId = ""; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Main); YouTubePlayerFragment youTubePlayerFragment = FragmentManager.FindFragmentById<YouTubePlayerFragment>(Resource.Id.youtube_fragment); youTubePlayerFragment.Initialize(ApiKey, this); } public virtual void OnInitializationSuccess(IYouTubePlayerProvider provider, IYouTubePlayer player, bool wasRestored) { if (!wasRestored) { player.CueVideo(VideoId); } } public void OnInitializationFailure(IYouTubePlayerProvider provider, YouTubeInitializationResult errorReason) { if (errorReason.IsUserRecoverableError) { errorReason.GetErrorDialog(this, RECOVERY_DIALOG_REQUEST).Show(); } else { Toast.MakeText(this, errorReason.ToString(), ToastLength.Long).Show(); } } } }
2.レイアウトxmlを修正
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/youtube_fragment" android:name="com.google.android.youtube.player.YouTubePlayerFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
実行画面
実行すると以下のような画面になり、youtubeが再生できることが確認できます。(実機推奨)