2010-11-22

mediaplayerを作ってみる(1)

SDカードのファイルを再生する

作っています。少しづつ。まあ、どこまでいけるか分かりませんが。
とりあえず、貼っときます。

xmlから。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:id="@+id/start_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/start_button">
    </Button>
    <Button
        android:id="@+id/stop_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/stop_button">
    </Button>
</LinearLayout>

ボタンが二つだけ。一応string.xmlも使ってみました。

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, SDMediaPlayerActivity!</string>
    <string name="app_name">SDMP</string>
    <string name="start_button">再生 / 次へ</string>
    <string name="stop_button">停止</string>
</resources>

 HelloWorld消すの忘れてました。

 で、Activity。

package net.asasvata.sdmediaplayer;

import java.util.ArrayList;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;

public class SDMediaPlayerActivity extends Activity
    implements View.OnClickListener {
   
    //フィールド
    private static int num = 0;//次の曲に進む用

    private MediaPlayer mp;
   
    private ArrayList<String> musicList;
   
    private Button btnStart;
    private Button btnStop;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //mpの生成
        mp = new MediaPlayer();
       
        //musicListの生成と曲の追加
        musicList = new ArrayList<String>();
        musicList.add("leavetheworldbehind.mp3");
        musicList.add("onlygirl.mp3");
        musicList.add("richgirl.mp3");
        musicList.add("rudeboy.mp3");
        musicList.add("yeahyeah.mp3");
       
        //ボタンの取得
        btnStart = (Button)findViewById(R.id.start_button);
        btnStop = (Button)findViewById(R.id.stop_button);
       
        //OnClickListenerのセット
        btnStart.setOnClickListener(this);
        btnStop.setOnClickListener(this);
    }
    //ボタンが押されたときの処理
    public void onClick(View view) {
        if (mp.isPlaying()) {
            if (view == btnStart) {
                if (++num < musicList.size()) {
                   
                    playMusic();
               
                } else {
                    num = 0;
                    playMusic();
                }
            } else if (view == btnStop) {
                mp.stop();
                try {
                    mp.prepare();
                } catch (Exception e){
                }
            }
        } else {
            if (view == btnStart) {
               
                playMusic();
            }
        }
    }
   
    public void playMusic() {
        mp.reset();
        try{
            mp.setDataSource(Environment.getExternalStorageDirectory().getPath()
                    + "/" + musicList.get(num));
            mp.prepare();
            mp.seekTo(0);
            mp.start();
        } catch (Exception e) {
        }
    }
}

Environment.getExternalStorageDirectory().getPath()
↑で、SDのパスが得られるようです。"/sdcard"でもいける様ですが。
こっちの方が確実みたいなので。

ボタンを押したときの動きは見たままです。
とりあえず、sdの音楽は再生できます。
エミュレーターのsdにファイルを入れるやり方はここを参考に。
sdのパスの取りかたも。

なんか疲れました。

0 件のコメント:

コメントを投稿