2011-02-23 34 views
3

我想在列表視圖中顯示來自sdcard的歌曲,但它給出了強制關閉。 任何人都可以幫助我做到這一點。 代碼:顯示來自SDCARD的歌曲

package com.ex.imageGallery; 

import java.io.File; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.drawable.ColorDrawable; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import java.io.FilenameFilter; 

public class audioList extends Activity{ 


@Override 
    public void onCreate(Bundle savedInstanceState) { 
    Uri[] mUrls; 
    String[] mFiles=null; 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.audio_list); 
     ListView lv; 
     lv = (ListView)findViewById(R.id.LV); 
     /*File home = Environment.getDataDirectory(); 
     File[] audioList = home.listFiles(new FilenameFilter() { 

      public boolean accept(File dir, String name) { 
       // TODO Auto-generated method stub 
       return(name.endsWith(".mp3")); 
      } 
     }); 
     mFiles = new String[audioList.length]; 
     for(int i=0;i<audioList.length;i++) 
     { 
      mFiles[i] = audioList[i].getAbsolutePath(); 
     } 
     mUrls = new Uri[mFiles.length]; 
     for(int i=0;i<mFiles.length;i++) 
     { 
      mUrls[i] = Uri.parse(mFiles[i]); 
     } 
     lv.setAdapter(new ArrayAdapter<String>(audioList.this,R.layout.new_list,mFiles)); 
     lv.setDividerHeight(2); 
     lv.setTextFilterEnabled(true); */ 
} 
} 
+3

@user:查看您的logcat和後是什麼錯誤,你得到了** – 2011-02-23 12:36:45

回答

3

媒體文件由系統,所以你需要使用查詢檢索媒體自動註冊。

final Cursor cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
    new String[] { MediaStore.Audio.Media.DISPLAY_NAME }, null, null, null); 

加載遊標。要在ListView中顯示它,您將需要使用SimpleCursorAdapter在ListView中顯示數據。

1
public class Database extends Activity { 
    /** Called when the activity is first created. */ 
    private List<String> list; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     //creating a folder in sdcard 
     File file = new File(Environment.getExternalStorageDirectory() 
       + File.separator 
       + "mymusic" //folder name 
      ); 

     if(!file.exists()) { 
      file.mkdirs(); 
     } 

     ListView lv=(ListView) findViewById(R.id.listView1); 
     list=getSD(); 

     lv.setAdapter((ListAdapter) new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list)); 

    } 

    //read from sdcard 
    private List<String> getSD() { 
     List<String> item = new ArrayList<String>(); 
     File f = new File("/mnt/sdcard/mymusic"); 
     File[] files = f.listFiles(); 

     for(int i=0; i < files.length; i++) { 
      File file = files[i]; 
      //take the file name only 
      String myfile = file.getPath().substring(file.getPath().lastIndexOf("/")+1,file.getPath().length()).toLowerCase(); 
      item.add(myfile); 
     } 

     return item; 
    } 
+2

歡迎StackOverflow的**請,**格式的帖子正確**和**解釋你的答案**(什麼!原始代碼錯誤,...)。謝謝! – 2011-05-09 18:44:37