Android: エミュレータで動画を再生(1)

Android で動画を再生するサンプルです。(今回は結構面白かったのでブログの方に書きます。)
音楽と動画の再生については、developer.android.comの"media - API Demos"が参考になります。このサンプルコードにあるVideoViewを使うと簡単に動画を再生することができます。
このサンプルコードはAndroid SDKのsampleディレクトリの下にもあります。今回はこれのほとんどコピペです。
(他には音楽の再生の場合と同じMediaPlayerを使う方法もあり。こちらはVideoViewに比べてコードが多い。)

  [単に再生]   [MediaControllerを付けて再生]

エミュレータで動画を再生する場合は、
 1. SDカードイメージの作成
 2. SDカードイメージファイル付きのAVDでエミュレータを起動
 3. 動画ファイルをSDカードイメージ内にコピー

動画のサイズはある程度小さくしないと、パフォーマンス上の問題でうまく再生できないようです。(ホストPCのハードウェアに依存)
また、元のサンプルではrequestFocus()を実行していますが、これはなくても再生/表示ができました。
これらについては「Android: エミュレータで動画を再生(2)」に書いたので、参考にして下さい。

["単に再生"のサンプル]
VideoViewSample.java

package jp.knowd.VideoViewSample;

import android.app.Activity;
import android.os.Bundle;
import android.widget.VideoView;

public class VideoViewSample extends Activity {
    private String path = "/sdcard/Video/Linux-Pronunciation-2.mp4";
    private VideoView mVideoView;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.videoview);

        mVideoView = (VideoView) findViewById(R.id.surface_view);
        mVideoView.setVideoPath(path);
        mVideoView.start();  
    }
}

["MediaControllerを付けて再生"のサンプル]
VideoViewSample.java

package jp.knowd.VideoViewSample;

import android.app.Activity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoViewSample extends Activity {
    private String path = "/sdcard/Video/Linux-Pronunciation-2.mp4";
    private VideoView mVideoView;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.videoview);

        mVideoView = (VideoView) findViewById(R.id.surface_view);
        mVideoView.setVideoPath(path);
        mVideoView.setMediaController(new MediaController(this));     
    }
}

videoview.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"
    > 
    
   < VideoView 
        android:id="@+id/surface_view" 
        android:layout_width="480px"
        android:layout_height="360px"
    /> 
    
</LinearLayout>