mobile CCTV,mobile surveillance,police body worn cameras

标题: BL502客户自己APP切换到外部TF卡存储 [打印本页]

author: besovideo    time: 2023-10-12 16:06
标题: BL502客户自己APP切换到外部TF卡存储
File externalFilesDir = Environment.getExternalStorageDirectory();
我插TF后,使用getExternalStorageDirectory数据目录依然是内部的TF卡,有办法存储到外部吗?


author: Arthur    time: 2023-10-12 16:12
        public static List<StorageInfo> listAvaliableStorage(Context context) {
                storages = new ArrayList<StorageInfo>();
               
                StorageManager storageManager =  (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
                try {
                        Class<?>[] paramClasses = {};
                        Method getVolumeList = StorageManager.class.getMethod(
                                        "getVolumeList", paramClasses);
                        getVolumeList.setAccessible(true);
                        Object[] params = {};
                        Object[] invokes = (Object[]) getVolumeList.invoke(storageManager,
                                        params);
                        if (invokes != null) {
                                StorageInfo info = null;
                                for (int i = 0; i < invokes.length; i++) {
                                        Object obj = invokes[i];
                                        Method getPath = obj.getClass().getMethod("getPath",
                                                        new Class[0]);
                                        String path = (String) getPath.invoke(obj, new Object[0]);
                                        info = new StorageInfo(path);

                                        Method isRemovable = obj.getClass().getMethod(
                                                        "isRemovable", new Class[0]);
                                        String state = null;
                                        try {
                                                Method getVolumeState = StorageManager.class.getMethod(
                                                                "getVolumeState", String.class);
                                                state = (String) getVolumeState.invoke(storageManager,
                                                                info.path);
                                                info.state = state;
                                        } catch (Exception e) {
                                                e.printStackTrace();
                                        }
                                        if (info.isMounted()) {
                                                info.isRemoveable = ((Boolean) isRemovable.invoke(obj,
                                                                new Object[0])).booleanValue();
                                                storages.add(info);
                                        }
                                }
                        }
                } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | IllegalArgumentException e1) {
                        e1.printStackTrace();
                }
                sdCounts = storages.size();
                return storages;
        }
author: cus6    time: 2023-10-12 16:24
Arthur post on2023-10-12 16:12
public static List listAvaliableStorage(Context context) {
                storages = new ArrayList();
               

     info = new StorageInfo(path);
Call requires API level 31 (current min is 26): new android.app.appsearch.StorageInfo
author: cus6    time: 2023-10-12 16:25
cus6 post on2023-10-12 16:24
info = new StorageInfo(path);
Call requires API level 31 (current min is 26): new android.ap ...

BL502使用的Android8.1
author: cus6    time: 2023-10-12 16:36

public class StorageUtil {
    public static List<StorageVolume> listAvailableStorage(Context context) {
        ArrayList<StorageVolume> storageVolumes = new ArrayList<>();

        StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
        if (storageManager != null) {
            StorageVolume[] volumes = storageManager.getStorageVolumes().toArray(new StorageVolume[0]);
            for (StorageVolume volume : volumes) {
                storageVolumes.add(volume);
            }
        }

        return storageVolumes;
    }
}

这个可以
author: Arthur    time: 2023-10-12 16:42
你获取到路径就行,这个StorageInfo是我们自己封装的类。




欢迎光临 mobile CCTV,mobile surveillance,police body worn cameras (http://bbs.besovideo.com:8067/) Powered by Discuz! X3.2