۱ محسن موسوی
مشکل در گرفتن فایل از حافظه
جامعه جاوا (اندروید) ایجاد شده در ۱۸ مرداد ۱۴۰۱

سلام.خسته نباشید.

می خواستم فایل‌های موزیک رو از حافظه بگیرم،طبق همین ویدیئویی که خودتون لینکش رو گذاشته بودید (https://www.youtube.com/watch?v=tUL8s484CzM)تقریبا پیش رفتم اما به فورس کلوز بر می‌خوردم.

حتی وقتی مو به مو مانند ویدئو پیش رفتم هم باز به همین مشکل خوردم.

هرچی سرچ کردم و فیلم و....همه همین روش رو رفته بودند،بدون هیچ تغییری،به مشکل هم نمی‌خوردند...

وقتی به عنوان فایل ورودی،Environment.getExternalstorageDirectory رو میدم،در قسمت دی باگ می‌گه که سایز فایل،صفر است و وقته به حلقه foreach میرسه فورس کلوز میکنه

for (File individualfile: files)

در قسمت Device file Explorer و پوشه emulated چیزی که توی عکس هست رو نشون میده

Permission مربوط به Read external storage رو قرار دادم و در dependencie کد مربوط به karumi رو اضافه کردم.6634-IMG_۲۰۲۲۰۸۰۹_۲۰۲۵۵۵.jpg

(با خود شبیه ساز رفتم توی چند تا سایت و چند تا موزیک دانلود کردم که فایل موزیک توی شبیه ساز وجود داشته باشه)

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();
        }
    }

سلام محسن جان وقت بخیر

دقت بفرمایید برای هر api باید داکیومنت کار با فایل رو مطالعه کنید

چون داکیومنت در خصوص کار با فایل‌ها همیشه در حال تغییره

پوریا شفیعی ۱۸ مرداد ۱۴۰۱، ۱۶:۵۱