2010-12-03

mediaplayerを作ってみる(9)

今回も、修正とちょっと改造。なかなか先に進まない。
色々修正してから進んだ方が、後が楽かなーと。
で、MusicPlayerから。

    public void setTitle() {
        titleView.setText((dirNum + 1) +
                "-" + (musicNum + 1) + ":" + musicList.get(musicNum));
    }

タイトルにディレクトリの番号を追加。Activityは、

        //spinnerの取得とArrayAdapterの生成及びセット
        spinner = (Spinner)findViewById(R.id.spinner);
        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item);
       
        int n = 0;
        for(String name : musicDirList) {
            ++n;
            spinnerAdapter.add(n + ":" + name);
        }

spinnerに番号追加。こんな簡単とは。なんだかなー。
そいで、onItemSelectedの最後に

changeMusicFlag = false;

追加。最後じゃなくてもいいかも。未確認。
それから、

    //色々セットして再生
    public void setAndPlayMusic() {
       
        //ディレクトリが変わってたらmusicFileList(MusicPlayerが参照してる方)
        //の中身を詰め替え。listViewと同じにする。
        if (spinnerPosition != musicPlayer.getDirNum()) {
            musicFileList.clear();
            for (String fileName : fileListForListView) {
                musicFileList.add(fileName);
            }
            musicPlayer.setDirNum(spinnerPosition);
        }

        musicPlayer.setMusicNum(listPosition);
        musicPlayer.playMusic();
        changeMusicFlag = false;           
    }

こんなメソッドを作成。同じのが、3回出てきたので。まとめただけ。
どっか適当に置いといてください。
そして、onItemClick

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //2度押しで再生。基本、再生ボタンと同じ。
        if (changeMusicFlag && startFlag && position == listPosition) {
           
            setAndPlayMusic();
           
        } else {
            //曲の選択をするだけ。再生はしない。とりあえず。
            listPosition = position;
            musicNum_listClicked = musicPlayer.getMusicNum();
            changeMusicFlag = true;
            startFlag = true;//1曲目なんか選択されたら。それだけのため。
        }        
    }

リストビュー2度押しで再生出来るようにしました。1度では再生しない。
あえて。 そいから、onClickStartの中、

if (!musicPlayer.isPlaying()){
           
            //停止中にlistViewで曲変更した場合
            if (changeMusicFlag) {
               
                setAndPlayMusic();
            }

さっきのメソッドに変えただけ。同じく、

//再生中で曲選択が変わってたら。つまり、listViewで選択した場合です。
        if (changeMusicFlag && musicNum_listClicked == musicPlayer.getMusicNum()) {   

            setAndPlayMusic();

場所分かるかな。まあ、何とか探してください。
も一つ、

    public void onClickPause(View view) {
        if (musicPlayer.isPlaying()) {
            musicPlayer.pause();
            pauseFlag = true;    //ここのみtrueに。
        } else {
            if (pauseFlag) {
                musicPlayer.start();
                pauseFlag = false;
            }
        }
    }

一時停止ボタンでも、pause解除出来るようにしました。
最後に、setTitle

titleView.setText((musicPlayer.getDirNum() + 1) +
                "-" + (n + 1) + ":" + musicFileList.get(n));

ディレクトリの番号を追加。MusicPlayerと同じく。
リストと再生中の曲のディレクトリが違う状況では、
番号が合った方がいいかなーと。

だいぶ修正したけども、まだ修正出来てないとこも。

一時停止してホームボタンを押す。
起動する。
再生する。

と、なんか一曲進むときが。進まない時もある。
onPauseとか、onResumeとか、よくわかってないんで。
なんか、そのせいだと思ってるけど。ちがうかも。
これは、ほっとく。たぶん。そのうち。いずれ。また。

次は、次こそ、ディレクトリをまたいでの連続再生。
前作ったのの遺産がまだあるので、たぶん大丈夫。
なので、おまけも。まあ、予定は未定で。

0 件のコメント:

コメントを投稿