관리 메뉴

moozi

MP3 플레이어 만들기 3 - MP3 목록가져오기 본문

안드로이드개발강좌

MP3 플레이어 만들기 3 - MP3 목록가져오기

moozi 2010. 4. 9. 17:18

이번 강좌는 지난 강좌 [ 안드로이드 개발 2.0 ] MP3 플레이어 만들기 2 - MP3 플레이어의 시작 에서 이어집니다.

지난 강좌에서는 SD Card 에 넣어 둔 mp3파일 한 개의 경로를 미리 지정해서 MP3파일을 플레이 했습니다. 이번 강좌에서는 MP3 파일의 목록을 가져오는 방법에 대한 내용입니다.

1. 다음과 같이 프로젝트를 생성합니다.



2. res -> layout -> main.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">

    <ListView android:id="@id/android:list"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:layout_weight="1"
              android:drawSelectorOnTop="false"/>

    <TextView android:id="@id/android:empty"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:text="No Music Files found on SD Card."/>
</LinearLayout>

위 코드에서 TextView는 MP3파일이 SD Card에 없을 경우 No Music Files found on SD Card 라고 표시해 줍니다.


3. res -> layout -> music_item.xml 을 추가합니다.


File 메뉴에서  New -> Other 선택


XML을 선택한 후 Next를 눌러 다음 화면에서 파일명에 music_item.xml 를 입력하세요.


생성된 music_item.xml 에 다음과 같이 편집합니다.

<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text1" xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

코드에서 TextView는 mp3파일의 이름을 출력하는데 사용됩니다.



4. src -> happy.MyMusicPlayer -> MyMusicPlayer.java 파일을 다음과 같이 편집합니다.

package happy.MyMusicPlayer;

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

import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;

class Mp3Filter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return (name.endsWith(".mp3")); // 확장자가 mp3인지 확인
    }
}

public class MyMusicPlayer extends ListActivity {
   
 private static final String MEDIA_PATH = new String("/sdcard/"); // 파일 경로 지정
 private List<String> songs = new ArrayList<String>();
  
 @Override
    public void onCreate(Bundle savedInstanceState) {
        try {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         updateSongList();
        } catch (NullPointerException e) {
           Log.v(getString(R.string.app_name), e.getMessage()); // 로그에 에러메시지 기록
        }
    }
   
    public void updateSongList() {
     File musicfiles = new File(MEDIA_PATH);
     ArrayAdapter<String> musicList = new ArrayAdapter<String>(this,R.layout.music_item,songs);
     
    if (musicfiles.listFiles( new Mp3Filter()).length > 0) {
       for (File file : musicfiles.listFiles( new Mp3Filter())) {
       songs.add(file.getName()); // mp3파일을 ArrayList에 추가
      }
        
       setListAdapter(musicList); // ArrayAdapter를 ListView에 바인딩
    }
  
  }    
 
}

코드에서 Mp3Filter 클래스는 FileNameFilter 클래스를 사용해서 mp3파일을 찾아내는 역할을 합니다. accept 매서드는 abstract 메서드로서 파일명에서 endsWith메서드를 이용해 mp3확장자를 가지고 있는지 여부를 true or false로 리턴해 줍니다.

MyMusicPlayer 클래스는 ListActivity를 상속받아서 생성합니다.
MEDIA_PATH 변수에 MP3파일의 경로('/sdcard/')를 지정했습니다.

updateSongList 메서드에서는 지정된 경로에 mp3파일이 있는지 if문에서 체크해서 mp3파일이 있으면 for문안에서 ArrayList인 song에 추가합니다. 그리고 나서 setListAdapter(musicList); 부분에서 ArrayAdapter인  musicList를 ListView에 바인딩합니다.


5. Ctrl+F11 로 실행해 봅니다.

[ mp3 파일이 없는 상태 ]


[ mp3 파일이 있는 경우 목록 출력 ]

다음 강좌에서는 mp3 목록에서 한개의 파일을 클릭해서 mp3를 플레이 하는 코드를 작성해 보겠습니다.

 

도움이 되셨다면 아래 손가락추천버튼을 눌러주시고 다음뷰에서 구독+해 주세요. 복 받으실거에요 ^^.

Comments