昔こんな記事を書いていて、AndroidでYoutube動画を再生していましたが、
ToolBarやDesignSupportLibを使おうと思ってはまった。。。ので、そのときの備忘録
wannabe-jellyfish.hatenablog.com
[PR] BabyTuba v1.3をリリースしました!
wannabe-jellyfish.hatenablog.com
はまったこと
前の記事ではYouTubeBaseActivity
を継承したActivityを使ってたのが主なはまりポイント。。。
YouTubeBaseActivity
ではなく、YouTubePlayerSupportFragment
を使わないといけなかった!
複雑なActivityたちの継承関係
ToolBarやDesignSupportLibを使いたい場合、ベースとなるActivityはandroid.support.v7.app.AppCompatActivity
でないといけない。。。
だけどYouTube Android APIのリファレンスによると継承関係はこんな感じ。。。
android.app.Activity |− com.google.android.youtube.player.YouTubeBaseActivity
ですが、YouTube Android APIでは、Fragmentも提供されてます!!
なのでそちらを利用するんですが、YouTubePlayerSupportFragment
のほうを追加います!
YouTubePlayerSupportFragment | YouTube Android API | Google Developers
android.support.v4.app.Fragment |− com.google.android.youtube.player.YouTubePlayerSupportFragment
YouTubePlayerFragment
もあるんですが、こちらはSupportLibに対応していないので、ご注意を!!
YouTubePlayerFragment | YouTube Android API | Google Developers
android.app.Fragment |− com.google.android.youtube.player.YouTubePlayerFragment
実際にYouTubeSupportFragmentを使ってみる
上記のポイントを押さえていれば、特にむずかしいとこはない感じ
Layout XML側はこんな感じ
Layout XMLには、<Toolbar>
とYouTubePlayerSupportFragmentを指定した<fragment>
を用意する
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- Tool Bar --> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content"/> <!-- Main Contents --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <!-- Player --> <fragment android:id="@+id/view_player" android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_weight="3" /> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" > <ListView android:id="@+id/list_related_videos" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </LinearLayout> </LinearLayout>
Java側はこんな感じ
Java側ではAppCompatActivity
を継承したActivityを使って
getSupportFragmentManager()
からYouTubePlayerSupportFragment
を取得し、
YouTubePlayerSupportFragment.initialize(DEVELOPER_KEY, this);
で初期化すればOK
public class PlayerActivity extends AppCompatActivity implements YouTubePlayer.OnInitializedListener { private static final String DEVELOPER_KEY = "your api key"; private static final String VIDEO_ID = "play video id" private static final int RECOVERY_DIALOG_REQUEST = 1; Toolbar mToolBar; YouTubePlayer mPlayer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); //ToolBarをセット mToolBar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolBar); // YouTubeフラグメントインスタンスを取得 YouTubePlayerSupportFragment fragment = (YouTubePlayerSupportFragment) getSupportFragmentManager().findFragmentById(R.id.view_player); // YouTubeフラグメントのプレーヤーを初期化する fragment.initialize(DEVELOPER_KEY, this); } // YouTubeプレーヤーの初期化成功 @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { if (!wasRestored) { mPlayer = player; mPlayer.loadVideo(VIDEO_ID); mPlayer.play(); } } // YouTubeプレーヤーの初期化失敗 @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) { // YouTube error if (errorReason.isUserRecoverableError()) { errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show(); } else { String errorMessage = String.format(getString(jp.memorylovers.youtube_lib.R.string.error_player), errorReason.toString()); Toast.makeText(getApplicationContext(), errorMessage, Toast.LENGTH_LONG).show(); } } }
以上!!