سلام.خسته نباشید.
می خواستم فایلهای موزیک رو از حافظه بگیرم،طبق همین ویدیئویی که خودتون لینکش رو گذاشته بودید (https://www.youtube.com/watch?v=tUL8s484CzM)تقریبا پیش رفتم اما به فورس کلوز بر میخوردم.
حتی وقتی مو به مو مانند ویدئو پیش رفتم هم باز به همین مشکل خوردم.
هرچی سرچ کردم و فیلم و....همه همین روش رو رفته بودند،بدون هیچ تغییری،به مشکل هم نمیخوردند...
وقتی به عنوان فایل ورودی،Environment.getExternalstorageDirectory رو میدم،در قسمت دی باگ میگه که سایز فایل،صفر است و وقته به حلقه foreach میرسه فورس کلوز میکنه
for (File individualfile: files)
در قسمت Device file Explorer و پوشه emulated چیزی که توی عکس هست رو نشون میده
Permission مربوط به Read external storage رو قرار دادم و در dependencie کد مربوط به karumi رو اضافه کردم.
(با خود شبیه ساز رفتم توی چند تا سایت و چند تا موزیک دانلود کردم که فایل موزیک توی شبیه ساز وجود داشته باشه)
public void readExternalStorage(){ Dexter.withActivity(this) .withPermission(Manifest.permission.READ_EXTERNAL_STORAGE) .withListener(new PermissionListener() { @Override public void onPermissionGranted(PermissionGrantedResponse response) { getNameofAudios(); } @Override public void onPermissionDenied(PermissionDeniedResponse response) { } @Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) { token.continuePermissionRequest(); } }).check(); } public ArrayList<File> readOnlyAudioSongs(File file){ ArrayList<File> arrayList = new ArrayList<>(); File[] files = file.listFiles(); for (File individualfile: files) { if (individualfile.isDirectory() && !individualfile.isHidden()){ arrayList.addAll(readOnlyAudioSongs(individualfile)); }else if (individualfile.getName().endsWith(".mp3") || individualfile.getName().endsWith(".aac") || individualfile.getName().endsWith(".wav"));{ arrayList.add(individualfile); } } return arrayList; } private void getNameofAudios(){ final ArrayList<File> audioSongs = readOnlyAudioSongs(Environment.getExternalStorageDirectory()); itemsAll = new String[audioSongs.size()]; for (int i = 0; i < audioSongs.size(); i++) { itemsAll[i] =audioSongs.get(i).getName(); } }