あたも技術ブログ

セットジャパンコーポレーションの社員が運営しています。

【Xamarin】Youtube再生【Android】

XamarinでYoutubeをアプリ内で再生しないといけない場面があり、少し詰まったので自分のメモがてら記事にまとめてみました。
AndroidYoutubeを再生するためにはいくつか手段がありますが、今回は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にする)

f:id:atamo_dev:20161226000054p:plain

f:id:atamo_dev:20161226000158p:plain

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を参照に追加

f:id:atamo_dev:20161226000708p:plain

Google Developers ConsoleでAPIキーを取得

1.GoogleDevelopersConsoleYouTube 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>

実行画面

f:id:atamo_dev:20161226000725p:plain

実行すると以下のような画面になり、youtubeが再生できることが確認できます。(実機推奨)