読者です 読者をやめる 読者になる 読者になる

It’s now or never

IT系の技術ブログです。気になったこと、勉強したことを備忘録的にまとめて行きます。

【Android】youtubeの動画を再生する

Androidで、youtubeの動画を再生するには大きく分けて2つの方法があります。

1つは、youtubeアプリに対してIntentを飛ばす方法で、
例えば下記のように記載することで直接youtubeアプリを起動することができます。

Intent intent = new Intent(Intent.ACTION_SEARCH);
intent.setPackage("com.google.android.youtube");
intent.putExtra("query", "Android");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

もう一つは、YouTube Android Player APIを使用する方法です。
これは、googleが提供しているAPIで、自分のアプリ内でyoutubeの再生機能を利用することができます。
(youtubeを起動はしない)

今回は、YouTube Android Player APIを使用して、 アプリ内で動画を再生する方法を試してみました。

API Keyを作成する

まずは、Google APIをアプリ上で実行するために、 Google Developlers Consoleにて、
APIKeyを取得します。


1.新規プロジェクトを作成

f:id:inon29:20140507210213p:plain

2.Youtube APIを有効にする

APIs & auth を選択し、 YouTube Data API v3をONにします。

f:id:inon29:20140507210701p:plain

3.API Keyを作成する

APIs & auth >Credentials を選択、 Public API accessにあるCREATE NEW KEYボタンを押下します。

f:id:inon29:20140407220058p:plain

キー種別の選択ダイアログが表示されるため、 Android keyを選択します。
続いて、表示されるテキストボックスにAndroidに組み込むkeystoreのSHA1のフィンガープリントおよび、
API実行を許可するアプリケーションのパッケージ名を入力します。

f:id:inon29:20140407220350p:plain

入力フォーマットは、[フィンガープリント];(セミコロン)[パッケージ名]となっています。

CREATEボタンを押下すれば、API keyの作成は完了です。
完了後に画面に表示されているAPI keyAndroidアプリケーションに組み込んで使用します。

例: 9F:DA:1F:03:71:4B:1E:BD:90:76:51:AB:26:0C:B7:41:2F:94:AB:C6;com.sample.gcmtest

※ keystoreのフィンガープリントを確認するには

■ 使用するコマンド

keytool -exportcert -alias androiddebugkey -keystore [署名するkeystoreのパス] -list -v

今回は、Android ADTで用意されているデバッグ用のkeystoreで確認します。
デバッグ用のkeystoreは、[ユーザーHOME]/.android/debug.keystoreにデフォルトkeyが配置されていて、 パスワードは、androidです。

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v

上記のコマンド実行結果から、表示されるフィンガープリントのSHA1の文字列をコピーすればOKです。


Androidアプリの実装

今回は、youtubeのプレーヤーをFragmentとして使用するサンプルアプリを実装します。

1.YouTube Android Player APIの最新バージョンをダウンロード

YouTube Android Player APIの最新版をダウンロードし、libs/にあるYouTubeAndroidPlayerApi.jarをプロジェクトへインポートします。

2.AndroidManifestの実装

下記、パーミッションを追加します。

<uses-permission android:name="android.permission.INTERNET"/>

3.layout.xmlYouTubePlayerFragmentを定義

今回は、動画の再生に使用するYouTubePlayerFragmentをlayout.xmlに定義して使用します。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment
      android:name="com.google.android.youtube.player.YouTubePlayerFragment"
      android:id="@+id/youtube_fragment"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

</LinearLayout>

4.Activityの実装

下記サンプルでは、Activityに登録されたYouTubePlayerFragmentインスタンスを、
上記で取得したAPI Keyで初期化しています。

また、初期化のコールバックを取得するために、YouTubePlayer.OnInitializedListenerを実装し、
初期化が成功したタイミングでプレーヤーの実行準備を行っています。

APIの詳細については、YouTube Android Player API - リファレンス ガイドを参照してください。

public class MainActivity extends Activity implements YouTubePlayer.OnInitializedListener {

    @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 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(Provider provider,
            YouTubeInitializationResult error) {
            // プレーヤーの初期化失敗時に呼ばれる
    }

    @Override
    public void onInitializationSuccess(Provider provider, YouTubePlayer player,
            boolean wasRestored) {
            // プレーヤーの初期化成功時に呼ばれる
        if (!wasRestored) {
            // 指定された動画のサムネイルを読み込み、プレーヤーがその動画を再生する準備を行う
            player.cueVideo("nCgQDjiotG0");
          }
        
    }

}

これだけで、アプリ内でyoutubeの動画を再生することができます。
他にも、ウィジェットなどのAPIも用意されているようなので、 色々試して見たいと思います。

参考リンク

https://developers.google.com/youtube/android/player/ https://developers.google.com/youtube/android/player/setup