Hatena::Groupandroid

lnzntの Android 日記 このページをアンテナに追加 RSSフィード

2012年04月16日(月)

MediaPlayer

23:00 | MediaPlayer - lnzntの Android 日記 を含むブックマーク はてなブックマーク - MediaPlayer - lnzntの Android 日記 MediaPlayer - lnzntの Android 日記 のブックマークコメント

MediaPlayer を使うサンプルを書いてみました。

f:id:lnznt:20120416224349j:image

エミュレータで音が再生されない

エミュレータで音が再生されないことがあります。

Snapshot を使わずに、UserData を wipe して起動しなおすと再生できます。

ググるとよく出てくる -useaudio オプションは既にないようです。

実装

public class MediaPlayerSampleActivity extends Activity
{
    private static final String TAG = "MediaPlayerSample";
    private MediaPlayer mediaPlayer = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mediaPlayer = MediaPlayer.create(this, R.raw.sample);
    }

    @Override
    protected void onDestroy() {
	super.onDestroy();
			
	mediaPlayer.release();
	mediaPlayer = null;
    }

    /*
       MediaPlayer の状態にマッチしない API をコールするとエラーになる
    */
    public void onStartPlayer(View v) {
	if (! mediaPlayer.isPlaying()) {
		mediaPlayer.start();
		Log.d(TAG, "player start.");
	}
    }
	
    public void onStopPlayer(View v) {
	if (mediaPlayer.isPlaying()) {
		mediaPlayer.stop();
		Log.d(TAG, "player stop.");
		
		try {
			mediaPlayer.prepare();
		} catch (IOException e) {
			mediaPlayer.release();
			mediaPlayer = null;
		}			
	}
    }
}

音声ファイルは res/raw/sample.ogg (適当に用意)。

res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/start_label" android:onClick="onStartPlayer"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/stop_label" android:onClick="onStopPlayer"/>

</LinearLayout>

res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">MediaPlayerSample</string>
    <string name="start_label">Start</string>
    <string name="stop_label">Stop</string>

</resources>