このブログを検索

mediaplayerを作ってみる(6)-2

2010年11月28日日曜日

|
続き。(6)-1からの。Activityを。

package net.asasvata.sdmediaplayer;

import java.io.File;
import java.util.ArrayList;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class SDMediaPlayerActivity extends Activity
        implements AdapterView.OnItemClickListener {
   
    //フィールド
    private static final String SD_PATH = //SDのパス
        Environment.getExternalStorageDirectory().getPath();
    private static final String FILE_SEP = File.separator;//pathの区切り文字
   
   
    private ArrayList<String> musicList;
    private MusicPlayer musicPlayer;   

    private boolean pauseFlag;//一時停止の判定用
    private boolean changeMusicFlag;//musicNumの変更判定用
    private int listPosition;//listViewが、クリックされた時の位置を保持
   
    private ListView listView;//ディレクトリ内の曲のリスト表示
    private TextView titleView;//現在選択されている曲の表示

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
               
        //musicListの生成と曲の追加
        musicList = new ArrayList<String>();
       
        File musicFile = new File(SD_PATH + FILE_SEP + "deepfm");
        String[] musicFileList = musicFile.list();
       
        for(String fileName : musicFileList) {
            File f = new File(SD_PATH + FILE_SEP + "deepfm"
                    + FILE_SEP + fileName);
            if(f.isFile() && fileName.endsWith("mp3"))
                musicList.add(fileName);
        }
       
        listView = (ListView)findViewById(R.id.listView);
       
        //ArrayAdapterの生成
        ArrayAdapter<String> listAdapter =
                new ArrayAdapter<String>(this, R.layout.rowdata, musicList);
       
        //listViewにlistAdapterをセット。
        listView.setAdapter(listAdapter);
        //クリックされた事を検知。selectedとの違いは分かってません。
        listView.setOnItemClickListener(this);
       
        //musicPlayerの引数に渡すので先に取得
        titleView = (TextView)findViewById(R.id.titleView);

        //musicPlayerの生成とmusicNumの取得
        musicPlayer = new MusicPlayer(musicList, titleView);

        //タイトルのセット。flagの初期化も。
        setTitle();
    }
   
    //とりあえず。
    @Override
    public void onStop() {
        super.onStop();
        musicPlayer.stop();
    }
   
    //なぜかOverride出来ない。listViewがクリックされた時の処理。
    //@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //曲の選択をするだけ。再生はしない。とりあえず。
        listPosition = position;
        setTitle(position);
    }

    //ボタンが押されたときの処理。レイアウトの右から順に。
    //戻る
    public void onClickBack(View view) {
        int n = musicPlayer.getMusicNum() - 1;//とりあえず減らす
       
        if (n < 0) {
            n = musicList.size() - 1;//最後の曲を指定
            musicPlayer.setMusicNum(n);
           
            if (musicPlayer.isPlaying()) musicPlayer.playMusic();
            else setTitle();
           
        } else {
            musicPlayer.setMusicNum(n);
           
            if (musicPlayer.isPlaying()) musicPlayer.playMusic();
            else setTitle();
        }
    }
    //進む
    public void onClickNext(View view) {
        int n = musicPlayer.getMusicNum() + 1;//とりあえず増やす。
       
        if (n < musicList.size()) {
            musicPlayer.setMusicNum(n);
           
            if (musicPlayer.isPlaying()) musicPlayer.playMusic();
            else setTitle();
           
        } else {
            n = 0;//1曲目を指定
            musicPlayer.setMusicNum(n);
           
            if (musicPlayer.isPlaying()) musicPlayer.playMusic();
            else setTitle();
        }
    }
    //再生   
    public void onClickStart(View view) {
        if (!musicPlayer.isPlaying()){
           
            //停止中にlistViewで曲変更した場合
            if (musicPlayer.getMusicNum() != listPosition) {
               
                musicPlayer.setMusicNum(listPosition);
                musicPlayer.playMusic();
                changeMusicFlag = false;
            }
           
            if (pauseFlag) {    //一時停止中なら
               
                musicPlayer.start();
                pauseFlag = false;
               
            } else {
               
                musicPlayer.playMusic();
                changeMusicFlag = false;
            }
        }
        if (changeMusicFlag) {    //再生中で曲選択が変わってたら。
                                //つまり、listViewで選択した場合です。
            musicPlayer.setMusicNum(listPosition);
            musicPlayer.playMusic();
            changeMusicFlag = false;
        }
    }
    //一時停止
    public void onClickPause(View view) {
        if (musicPlayer.isPlaying()) {
            musicPlayer.pause();
            pauseFlag = true;    //ここのみtrueに。
        }
    }
    //停止
    public void onClickStop(View view) {
        if(musicPlayer.isPlaying()) musicPlayer.stop();
        else pauseFlag = false;    //一時停止解除
    }
    //skip。これは、そのまま。
    public void onClickSkip(View view) {
        if(musicPlayer.isPlaying()) musicPlayer.skipMusic();
    }
   
    //タイトルをセット。
    public void setTitle() {
        pauseFlag = false;        //一時停止解除
        changeMusicFlag = true;//曲変更のお知らせ。
        int n = musicPlayer.getMusicNum();
        titleView.setText((n + 1) + ": " + musicList.get(n));
    }
    //タイトルをセット。listViewがクリックされた時用
    public void setTitle(int num) {
        pauseFlag = false;       
        changeMusicFlag = true;
        titleView.setText((num + 1) + ": " + musicList.get(num));
    }
}

こんな感じ↓。

















まあ、アレのイメージです。
前のよりボタンを増やしすぎて、だんだんワケが分からなくなってきた。

進むとか戻るはいるのか。listViewをタッチして再生した方がいいか。
動きが変なとこもあるかも。まあ、だいたいで。

次は、また大きく変わるかも。変わらないかも。

0 コメント:

コメントを投稿

 

Lorem

ページビューの合計