2015-05-15 71 views
0

我即使使用Environment.getExternalStorageDirectory()甚至直接使用/sdcard/应用程序从手机的内部存储。我现在用摩托E用于测试SD卡没有得到访问的Android

请帮助获取数据后,面对持续的问题与访问SD卡

public class SongsManager { 

final String MEDIA_PATH = new String(Environment.getExternalStorageDirectory().getPath()); 
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

// Constructor 
public SongsManager(){ 

} 




public ArrayList<HashMap<String, String>> getPlayList(){ 
    File home = new File(MEDIA_PATH); 
    walkdir(home); 





    return songsList; 



} 

public void walkdir(File dir) { 
    String Pattern = ".mp3"; 
    File listFile[] = dir.listFiles(); 
    if (listFile != null) { 
    for (int i = 0; i < listFile.length; i++) { 
    if (listFile[i].isDirectory()) { 
    walkdir(listFile[i]); 
    } else { 
    if (listFile[i].getName().endsWith(Pattern)){ 
     for (File file : dir.listFiles(new FileExtensionFilter())) { 
      HashMap<String, String> song = new HashMap<String, String>(); 
      song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4))); 
      song.put("songPath", file.getPath()); 

      // Adding each song to SongList 
      songsList.add(song); 
     } 

    } 
    } 
    } 
    } 
    } 

} 


class FileExtensionFilter implements FilenameFilter { 
    public boolean accept(File dir, String name) { 
     return (name.endsWith(".mp3") || name.endsWith(".MP3")); 
    } 
} 
+0

https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html – CommonsWare

+0

使用getAbsolutePath()后,它给出路径/ storage/emulate/0.Still not access SD卡。 –

回答

0

而不是做这个的:

final String MEDIA_PATH = new String(Environment.getExternalStorageDirectory().getPath()); 
... 
File home = new File(MEDIA_PATH); 

你可能只是这样做:

File home = Environment.getExternalStorageDirectory(); 

,然后打电话给你的方法walkdir

walkdir(home); 

我认为这个问题是在getPath()方法。也许它应该是getAbsolutePath()方法

+0

使用getAbsolutePath()后,它给路径/storage/emulated/0.Still不能访问SD卡 –

+0

用我给你的表达式执行'File home = Environment.getExternalStorageDirectory();'。 getAbsolutePath()方法是第二种方式,请根据所提供的代码给出一个示例 –

0

这对于Android来说是正常的。在android上获取可移动媒体的路径并不容易。你可以在这个网站上阅读很多有关这方面的内容。将一个目录选择器添加到您的应用程序,以便用户可以指示它。尝试getExternalFileDirs()。如果它给你两个目录,后者将是微型SD卡。

+0

。 –

+0

如果你用这个函数稍微摆弄一下,IDE会给出足够的提示来实现一些代码行。如果没有,你可以稍后显示你的代码。 – greenapps