从外部存储加载 ListView 上.mp3文件的列表,在棉花糖上不起作用



可能在Lolipop/Kitkat之前工作,但我没有测试它。我正在我的 xperia m2 aqua 上的棉花糖上测试这个,它没有显示我的可移动 sdcard 中的音乐,所以,我将两首音乐从 sdCard 复制到内部存储,它正在显示这两首音乐。其他音乐播放器在手机上运行良好。 下面是我的代码:

public class ListviewActivity extends AppCompatActivity {
ListView listView;
String[] items;
ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_songs);
listView= (ListView) findViewById(R.id.listView);

ArrayList<File> mySongs = findSong(Environment.getExternalStorageDirectory());
Log.d("myLog"," "+Environment.getExternalStorageState());
Log.d("myLog"," "+Environment.getExternalStorageDirectory());
Log.d("myLog"," "+Environment.getExternalStorageDirectory().getAbsolutePath());

items = new String[mySongs.size()];
for (int i = 0; i < mySongs.size(); i++) {
Toast.makeText(this, "  "+mySongs.get(i).getName().toString(), Toast.LENGTH_SHORT).show();
//  items[i] = mySongs.get(i).getName().toString();
items[i] = mySongs.get(i).getName().toString();
}
arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items);
Log.d("myLog"," "+items);

listView.setAdapter(arrayAdapter);
}
public ArrayList<File> findSong(File root) {
ArrayList<File> al = new ArrayList<File>();
File[] files = root.listFiles();    // All file and folder automatic collect
for (File singleFile : files) {
if (singleFile.isDirectory() && !singleFile.isHidden()) {
al.addAll(findSong(singleFile)); //Recursively call
} else {
if (singleFile.getName().endsWith(".mp3")) {
al.add(singleFile);
}
}
}
return al;
}
}

从上面的代码结果中记录

mounted
/storage/emulated/0
/storage/emulated/0

清单许可

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

棉花糖和更高的

程序性许可
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
}else{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 738);
}
}

结果它只显示来自内部存储的歌曲。我已经在内部存储中添加了两首歌曲进行检查,它消失了。为什么不从sdCard读取,尽管我已经设置了权限和所有工作代码?

更新

@Manoj已将此问题标记为可能重复,但事实并非如此。我已给予适当的权限,如果用户也点击拒绝,那么下次它会再次询问。 在我的代码中,我使用了if/else作为权限,我认为@Manoj没有看清楚。

你帖子的主题是完全错误的,因为你唯一想知道的就是How to detetermine the path to an SD card

好吧,这个网站每周至少问两次,所以只要稍微阅读一下,你就会找到它。

但是看看getExternalFilesDirs()返回的第二项。

最新更新