View Full Version : مشکل در کار با فایل ها در اندروید ۴.۴ به بالا
  
aria.hamed
دوشنبه 07 فروردین 1396, 22:05 عصر
سلام دوستان 
چطوری میشه به فایل ها در اندروید ۴.۴ به بالا دسترسی داشته باشم و با هاشون کار کنم ؟
در اندروید ۴.۴ به پایین همه چیز به خوبی کار میکنه ولی روی اندروید 4.4 به بالا کار نمی کنه ؟
لطفا راهنمایی کنید 
باتشکر
JYasProgramer
سه شنبه 08 فروردین 1396, 21:32 عصر
سلام چه اروری میده
aria.hamed
چهارشنبه 09 فروردین 1396, 15:53 عصر
سلام چه اروری میده
سلام روی کد توضیح می دم
این کد کامل کلاسه
http://s8.picofile.com/file/8290655676/Find.java.html
class Find {
    String folder_in_prosess = null;
    private ArrayList<String> list_track = new ArrayList<>();
    private String media_path = "/storage";
    private boolean search_in_hidden_file = false;
    private ArrayList<String> block_folder = new ArrayList<>();
    Find(String path, boolean search_in_hidden_file, ArrayList<String> block_folder) {
        if (!path.isEmpty())
            media_path = path;
        if (search_in_hidden_file)
            this.search_in_hidden_file = true;
        if (block_folder != null) {
            this.block_folder = block_folder;
        }
    }
    private boolean block_check(File file) {
        try {
            if (file.isFile())
                folder_in_prosess = file.getPath().substring(0, file.getPath().length() - file.getName().length());
            else
folder_in_prosess = file.getPath();
        } catch (Exception e) {
            return false;
        }
        Set<String> set = new HashSet<>(block_folder);
        return set.contains(folder_in_prosess);
    }
    private boolean checking_hidding_file(File file) {
        return search_in_hidden_file || !file.isHidden();
    }
    ArrayList<String> findFile() {
        File home = new File(media_path);
        File[] listFiles = home.listFiles();
        if (checking_hidding_file(home))
            if (!block_check(home)) {
                if (listFiles != null && listFiles.length > 0) {
                    for (File file : listFiles) {
                        if (checking_hidding_file(file))
                            if (!block_check(file)) {
                                if (file.isDirectory()) {
                                    scanDirectory(file);
                                } else {
                                    addSongToList(file);
                                }
                            }
                    }
                }
            }
        // return songs list array
return list_track;
    }
    private void scanDirectory(File directory) {
        if (directory != null) {
            File[] listFiles = directory.listFiles();
            if (checking_hidding_file(directory))// check hide
if (!block_check(directory)) {//check block_folder
if (listFiles != null && listFiles.length > 0) {
                        for (File file : listFiles) {
                            if (checking_hidding_file(file))
                                if (!block_check(file)) {
                                    if (file.isDirectory())
                                        scanDirectory(file);
                                    else
addSongToList(file);
                                }
                        }
                    }
                }
        }
    }
    private void addSongToList(File song) {
        String t = song.getPath();
        if (t.length() > 5)
            if (accept_file(song.getName()))
                list_track.add(t);
    }
    private boolean accept_file(String name) {
        return
name.toLowerCase().endsWith(".mp3") ||
                        name.toLowerCase().endsWith(".wav") ||
                        name.toLowerCase().endsWith(".ogg");
    }
}
کلاس رو هم به صورت زیر فراخوانی می کنم 
من  می خوام لیست فایل های موجود در پوشه ۱ درون حافظه خارجی رو بدست بیارم
Find findMusic = new Find(Environment.getExternalStorageDirectory() + "/1", true, t1);
ArrayList<String> t = findMusic.findFile();
وقتی می خوام فایل های اون پوشه رو مرور کنم  listfile کار نمی کنه و مقدار null رو بر می گردونه 
        File home = new File(media_path);
        File[] listFiles = home.listFiles();
مجوز دسترسی به فایل رو هم در AndroidManifest.xml گذاشتم 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
اینم یه عکس از در هنگام دیباگ در اندروید ۲۳
http://s9.picofile.com/file/8290655026/a.jpg
JYasProgramer
چهارشنبه 09 فروردین 1396, 17:14 عصر
اگه وقتی در اندروید 6 اجرا میکنی یا با ورژن 23 برنامتو کامپایل میکنی به مشکل بر میخوری باید مجوز دسترسی به اکسترنال استورج رو داینامیک بگیری
با 6 کارمیکنی یا با 23 کامپایل میکنی؟
aria.hamed
چهارشنبه 09 فروردین 1396, 20:25 عصر
سلام 
با 25 کامپایل می کنم 
روی گوشی با اندروید ۱۸ تست کردم درست جواب می ده, گوشی سونی بوده
روی  گوشی با اندروید ۲۱ و ۲۳ تست کردم جواب نداد, گوشی به ترتیب هواوی و سامسونگ بوده
بعد منظور از داینامیک گرفتن مجوز چیه ؟ چطوریه ؟
JYasProgramer
چهارشنبه 09 فروردین 1396, 22:32 عصر
فک کنم این به دردت بخوره
http://stackoverflow.com/questions/33139754/android-6-0-marshmallow-cannot-write-to-sd-card
aria.hamed
چهارشنبه 09 فروردین 1396, 23:17 عصر
فک کنم این به دردت بخوره
http://stackoverflow.com/questions/33139754/android-6-0-marshmallow-cannot-write-to-sd-card
سلام
با راهنمایی شما مشکل حل شد ممنون:چشمک:
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.