Проверка наличных sd-cards and internal storages?

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
JDev
Сообщения: 88
Зарегистрирован: 05 авг 2012, 19:42

Проверка наличных sd-cards and internal storages?

Сообщение JDev » 14 июн 2015, 18:46

Здравствуйте, пытаюсь дать пользователю возможность сохранить данные в нужное место если например и внутренняя память и карточка встроенная.
Но вылетает странная ошибка.

Может кто подскажет как правильно проверять все носители? Вариантов столько что, все и не перепробуешь и не знаешь какой правильный в данном случае...

Делаю так.

Код: Выделить всё

        String extStore = System.getenv("EXTERNAL_STORAGE"); //возвращает /storage/emulated/legacy
        String secStore = System.getenv("SECONDARY_STORAGE"); // возвращает /storage/sdcard1:/storage/usbdisk0

//Вычисляю свободное место
    public static float megabytesAvailable(String  strPath) {
        StatFs stat = new StatFs(strPath);
        long bytesAvailable = (long)stat.getBlockSize() * (long)stat.getAvailableBlocks();
        return bytesAvailable / (1024.f * 1024.f);
    }

secStore в данном случае рубит ошибку

Caused by: java.lang.IllegalArgumentException: Invalid path: /storage/sdcard1:/storage/usbdisk0
            at android.os.StatFs.doStat(StatFs.java:46)
            at android.os.StatFs.<init>(StatFs.java:39)
            at com.jdev.common.Settings.megabytesAvailable(Settings.java:36)
            at com.jdev.common.Settings.checkStorages(Settings.java:28)
            at com.jdev.MainActivity.init(MainActivity.java:56)
            at com.jdev.MainActivity.onCreate(MainActivity.java:51)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2264)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5139)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: libcore.io.ErrnoException: statvfs failed: ENOENT (No such file or directory)
            at libcore.io.Posix.statvfs(Native Method)
            at libcore.io.ForwardingOs.statvfs(ForwardingOs.java:132)
            at android.os.StatFs.doStat(StatFs.java:44)
            at android.os.StatFs.<init>(StatFs.java:39)
            at com.jdev.common.Settings.megabytesAvailable(Settings.java:36)
            at com.jdev.common.Settings.checkStorages(Settings.java:28)
            at com.jdev.MainActivity.init(MainActivity.java:56)
            at com.jdev.MainActivity.onCreate(MainActivity.java:51)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2264)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)

Спасибо!

Ответить