0
Media Player를 만들고 ArrayList에 mp3 파일을로드하고 싶습니다. get getMP3Files라는 메서드에서이를 만듭니다. 이것은 오랜 시간이 걸립니다. 그래서 나는 그것을 다른 실에 넣고 싶었다. 하지만 나는 컨텍스트와 run() 메소드를 얻지 못한다.스레드에서 컨텍스트를 얻거나 프로세스를 단축하는 방법은 무엇입니까?
프로세스를 단축하거나 컨텍스트를 가져올 가능성이 있습니까?
미리 감사드립니다.
getMP3Files는 :
private void getMP3Files(Context context, String directory,ArrayList<MusicListArray> mp3_list){
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
Uri uri;
byte[] album_art;
Bitmap bitmap;
/*File[] files = Directory.listFiles(new MP3FileNameFilter());
files = Directory.listFiles();*/
File folder = new File(directory);
for (File file : folder.listFiles()) {
if (file.isFile()) {
if (file.getName().endsWith(".mp3") || file.getName().endsWith(".MP3")) {
uri = Uri.fromFile(file);
mediaMetadataRetriever.setDataSource(context,uri);
String artist = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
String title = file.getName();
album_art = mediaMetadataRetriever.getEmbeddedPicture();
if(album_art != null){
bitmap = BitmapFactory.decodeByteArray(album_art, 0, album_art.length);
}else{
bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);
}
if(bitmap == null){
bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);
}
if (title.indexOf(".") > 0)
title = title.substring(0, title.lastIndexOf("."));
if(artist == null){
artist = getString(R.string.unknown_artist);
}
mp3_list.add(new MusicListArray(title,artist,file,bitmap));
}
}else if(file.isDirectory()){
getMP3Files(context, file.getPath(), mp3_list);
}
}
Collections.sort(mp3_list);
/*for(int i=0;i<files.length;i++){
mp3_list.add(new MusicListArray(files[i].getName(),"Test",files[i]));
}*/
//return mp3_list;
}
I는 다음과 같이 원하는 :
public void run() {
getMP3Files(this, Environment.getExternalStorageDirectory().getPath(), list);
StableArrayAdapter adapter = new StableArrayAdapter(this,R.layout.drawer_list_item,list);
// Set the adapter for the list view
mDrawerList.setAdapter(adapter); //Error
}
활동 또는 다른 클래스에서 메소드가 실행되는 위치는 어디입니까? – Jorgesys
run() 메서드는 작업 내에서 내부적입니까? 이 경우에는 MYActivity를 사용할 수 있습니다.이 –
'run()'과'getMP3Files'는 MainActivity에 있습니다. @ phemt.latd가 작동하지 않습니다. :/ 파일 검색을 줄이는 방법에 대한 아이디어가 있으니 스레드가 필요하지 않습니까? –