【发布时间】:2016-11-09 04:30:40
【问题描述】:
如果这是一个愚蠢的问题,我深表歉意,它可能会成为一个快速解决方案,但我就是想不通。我正在 android studio 中构建一个音乐播放器,并且 sdcard 上的所有歌曲都没有显示在列表视图中,只有内部存储器中的歌曲,即使我确实实现了 getExternalStorageDirectory() 并在清单文件中添加了权限。 非常感谢任何对此或建设性批评的意见。这是主要的java类。
public class MainActivity extends AppCompatActivity {
ListView lv;
String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lvPlayList);
//---------------------------------------------> V HERE V <-------------------------
final ArrayList<File> mySongs = findSongs(Environment.getExternalStorageDirectory());
//----------------------------------------------------------------------------------
items = new String[ mySongs.size() ];
for(int i = 0; i<mySongs.size(); i++) {
toast(mySongs.get(i).getName().toString());
items[i] = mySongs.get(i).getName().toString().replace(".mp3", "").replace(".wav", "");
}
ArrayAdapter<String> adp = new ArrayAdapter<>(getApplicationContext(), R.layout.song_layout, R.id.textView, items);
lv.setAdapter(adp);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
startActivity(new Intent(getApplicationContext(), Player.class).putExtra("pos",position).putExtra("songlist",mySongs));
}
});
}
public ArrayList<File> findSongs(File root) {
ArrayList<File> al = new ArrayList<>();
File[] files = root.listFiles();
for(File singleFile : files) {
if(singleFile.isDirectory() && !singleFile.isHidden()) {
al.addAll(findSongs(singleFile));
} else {
if(singleFile.getName().endsWith(".mp3") || singleFile.getName().endsWith(".wav")) {
al.add(singleFile);
}
}
}
return al;
}
public void toast(String text) {
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
}
}
【问题讨论】:
-
使用棉花糖 6.0??
-
最低 API 10,Gingerbread,不过使用了冰淇淋三明治设备。
标签: java listview android-studio android-sdcard audio-player