2014-08-30 122 views
0

当我尝试运行我的手机(MOTO G)的媒体播放器应用程序,我不能够看到列表中的任何.mp3文件。存储路径

但是,当我在Eclipse中运行模拟器的同一个应用程序的工作正常,我能够看到列表中的MP3文件,我已经给了我下面的代码能有人帮我解决这个问题。

public class Playlist extends ActionBarActivity{ 

public final String SD_CARD = new String(Environment.getExternalStorageDirectory().getAbsolutePath()); 
public List<String> songs = new ArrayList<String>(); 
public ListView lv; 
public ArrayAdapter<String> ad; 


    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.song_list); 

    lv = (ListView)findViewById(R.id.listView1); 
    Updateplaylist(); 

    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long arg3) { 
      Intent in2 = new Intent(getBaseContext(), MainActivity.class); 
      in2.putExtra("songindex", position); 
      setResult(100, in2); 
      finish(); 
     } 
    }); 
} 

    public void Updateplaylist() { 
     File home = new File(SD_CARD); 
     if(home.listFiles(new MP3capture()).length > 0){ 
      for(File file:home.listFiles(new MP3capture())){ 
       songs.add(file.getName()); 
      } 
      ad = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1, songs); 
      lv.setAdapter(ad); 
     } 

    } 
    class MP3capture implements FilenameFilter{ 
     @Override 
     public boolean accept(File dir, String filename) { 
      return (filename.endsWith(".mp3")); 
     } 
    } 
} 
+0

你添加了所有需要在Android清单文件的权限?有时应用程序在模拟器中工作,没有在Android清单文件 – 2014-08-30 15:37:34

+0

是的,我仅添加了一个权限读取外部存储android.permission.READ_EXTERNAL_STORAGE – 2014-08-30 15:41:46

+0

把一首歌曲的存储和测试根再次添加权限,我认为你是只检查根。 – 2014-08-30 15:47:24

回答

0

使用此代码,而不是它会列出所有的歌给你,我测试了我的HTC One和它列出的所有歌曲

public final String SD_CARD = new String(Environment.getExternalStorageDirectory().getAbsolutePath()); 
public List<String> songs = new ArrayList<String>(); 
public ListView lv; 
public ArrayAdapter<String> ad; 


    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    lv = (ListView)findViewById(R.id.listView1); 
    Updateplaylist(); 

    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long arg3) { 
      Intent in2 = new Intent(getBaseContext(), MainActivity.class); 
      in2.putExtra("songindex", position); 
      setResult(100, in2); 
      finish(); 
     } 
    }); 
} 

    public void Updateplaylist() { 
     listFiles(SD_CARD); 
    } 
    class MP3capture implements FilenameFilter{ 
     @Override 
     public boolean accept(File dir, String filename) { 
      return (filename.endsWith(".mp3")); 
     } 
    } 

    private void listFiles(String destination) 
    { 
     File home = new File(destination); 
     if(home.listFiles().length > 0){ 
      for(File file:home.listFiles(new MP3capture())){ 
       songs.add(file.getName()); 
      } 
      for(File file:home.listFiles()) 
      { 
       if(file.isDirectory()) 
       { 
        listFiles(file.getAbsolutePath()); 
       } 
      } 
      ad = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1, songs); 
      lv.setAdapter(ad); 
     } 
    } 

你可以找到一个更好的解决方案(13秒后),列出文件速度很慢。 但它显示列出所有文件的正确方法。