안드로이드 개발 질문/답변
(글 수 45,052)
package com.android.danmusic;
import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList;
import android.app.ListActivity; import android.content.Context; import android.database.Cursor; import android.media.MediaPlayer; import android.os.Bundle; import android.provider.MediaStore; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast;
public class makelist extends ListActivity { private ListView listview; public static final int MAX = 100; private MediaPlayer mp = new MediaPlayer(); int cnt = 0; int current = 0; TextView tv; private static final String MEDIA_PATH = new String("/sdcard/"); private ArrayList<Music> songs = new ArrayList<Music>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.makelist); tv = (TextView)findViewById(R.id.temp); listview = getListView(); // SD카드로 부터 파일 목록 불러오기 updateSongList(); } public void updateSongList(){ Music[] music = new Music[MAX]; //Resources r = getResources(); String[] mCursorCols = new String[]{ MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ALBUM }; Cursor cur = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mCursorCols, null, null, null); if( cur.moveToFirst() ){ String title, artist, album; int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE); int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST); int albumColumn = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM); do{ title = cur.getString(titleColumn); artist = cur.getString(artistColumn); album = cur.getString(albumColumn); music[cnt] = new Music(artist, title, album); songs.add(music[cnt]); cnt++; }while(cur.moveToNext()); } MusicInformation songList = new MusicInformation(this, R.layout.listform, songs); setListAdapter(songList); //listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); } @Override // 리스트에서 곡을 클릭했을때 재생 protected void onListItemClick(ListView l,View v, int position, long id){ /*File home = new File(MEDIA_PATH); String[] list = new String[10]; list = home.list(new MP3Filter());*/ current = position; playsong(MEDIA_PATH + songs.get(position)); tv.setText(MEDIA_PATH + songs.get(position)); } private void playsong(String Spath) { mp.reset(); try { mp.setDataSource(Spath); mp.prepare(); mp.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
private class MusicInformation extends ArrayAdapter<Music>{ private ArrayList<Music> items; public MusicInformation(Context context, int textViewResourceId, ArrayList<Music> items){ super(context, textViewResourceId, items); this.items = items; } @Override public View getView(int position, View view, ViewGroup parent){ View v = view; if( v == null ){ LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.listform, null); } Music m = items.get(position); if( m != null ){ TextView tt = (TextView)v.findViewById(R.id.row_artist); TextView bt = (TextView)v.findViewById(R.id.row_title); if( tt != null ){ tt.setText(m.getGasu() + " - " + m.getJemok()); } if( bt != null ){ bt.setText(m.getAlbumName()); } } return v; } } class Music{ private String gasu; private String jemok; private String albumName; public Music(String _gasu, String _jemok, String _albumName){ this.gasu = _gasu; this.jemok = _jemok; this.albumName = _albumName; } public String getGasu(){ return gasu; } public String getJemok(){ return jemok; } public String getAlbumName(){ return albumName; } } class MP3Filter implements FilenameFilter{ public boolean accept(File dir, String name){ return name.endsWith(".mp3"); } } }
이것이 소스 입니다. 보실 부분은 mp.setDatesource() 이 부분인데요 (73번째 줄 부터)
MEDIA_PATH는 sdcard/LOST.DIR/ 이 폴더로 잘 설정 되어 있는데
songs.get(position) 이 부분에서 그림과 같은 경로가 저장 되어 버립니다...;;
음악이 제대로 나오는 다른 소스들을 보면 sdcard/LOST.DIR/음악이름.mp3 이렇게 잘 나오는데...
계속해서 이상한 경로가 나오네요.
ㅈㅔ대로된 경로 좀 잡아주세요ㅠ
music[cnt] =
new
Music(artist, title, album) 뮤직 인스턴스를 music배열에 넣으셨는데 이것을 songs.add(music[cnt]) songs 배열리스트에 넣으셨잖아요 나중에 songs.get(position) 이렇게 빼셔도 이것은 파일 이름이 아니라 뮤직 인스턴스가 나오는것 같은데요