안드로이드 개발 질문/답변
(글 수 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] =newMusic(artist, title, album) 뮤직 인스턴스를 music배열에 넣으셨는데 이것을 songs.add(music[cnt]) songs 배열리스트에 넣으셨잖아요 나중에 songs.get(position) 이렇게 빼셔도 이것은 파일 이름이 아니라 뮤직 인스턴스가 나오는것 같은데요