精华内容
下载资源
问答
  • Android 通过反射获取外置SD卡路径 Android 通过反射获取外置SD卡路径 Android 通过反射获取外置SD卡路径
  • 该工具类说明:获取手机存储设备如手机本身存储以及插入的外置SD卡存储信息,包括根路径,是否可以移除,以及是否为挂载状态,可根据是否可移除来判断是否是机身存储以及是否是插入的外置SD卡。 package ...

    该工具类说明:获取手机存储设备如手机本身存储以及插入的外置SD卡存储信息,包括根路径,是否可以移除,以及是否为挂载状态,可根据是否可移除来判断是否是机身存储以及是否是插入的外置SD卡。

    package com.dh.lenovo.mysdcrd;
    import android.content.Context;
    import android.os.storage.StorageManager;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.HashMap;

    public class IsHaveOtherSdcard {

        public ArrayList<HashMap<String,Object>> getSdcardStatus(Context context){
            ArrayList<HashMap<String,Object>> list = new ArrayList<>();
            StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
            try {
                Method method_volumeList = StorageManager.class.getMethod("getVolumeList");
                method_volumeList.setAccessible(true);
                Object[] volumeList = (Object[]) method_volumeList.invoke(storageManager);
                if(volumeList.length>=1){
                    for(int i=0;i<volumeList.length;i++){
                        HashMap<String,Object> map = new HashMap<>();
                        //存储根路径
                        map.put("path", (String) volumeList[i].getClass().getMethod("getPath").invoke(volumeList[i]));
                        //存储挂载状态mounted为挂载状态
                        map.put("state",(String) volumeList[i].getClass().getMethod("getState").invoke(volumeList[i]));
                        //是否可移除,可移除表示外置Sd卡,不可移除表示手机机身存储
                        map.put("isRemovable",(boolean) volumeList[i].getClass().getMethod("isRemovable").invoke(volumeList[i]));
                        list.add(map);
                    }
                    return list;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    展开全文
  • 在项目中遇到这个问题,因为Android4.4Kitkat的新特性,导致不能对外置SD卡的文件夹进行写入操作,然后因为写入操作导致程序崩溃。   这个问题着实困扰了我好久,解决这个问题主要是两个方向,第一判断这个存储...

    在项目中遇到这个问题,因为Android4.4Kitkat的新特性,导致不能对外置SD卡的文件夹进行写入操作,然后因为写入操作导致程序崩溃。

     

    这个问题着实困扰了我好久,解决这个问题主要是两个方向,第一判断这个存储路径是否是可以写入的。第二,判断是不是android4.4的设备,如果是再判断相应存储的路径是不是外置SD卡路径,这时就需要解决获取外置SD卡路径的问题了。因为第一个方向没行得通,所以本文主要介绍的是获取外置SD卡路径的方法。


    public static File getRemovableStorage() {
        final String value = System.getenv("SECONDARY_STORAGE");
        if (!TextUtils.isEmpty(value)) {
            final String[] paths = value.split(":");
            for (String path : paths) {
                File file = new File(path);
                if (file.isDirectory()) {
                    return file;
                }
            }
        }
        return null;
    }
    
    
    public static boolean isFileOnRemovableStorage(File file) {
        final File microSD = getRemovableStorage();
        if (microSD != null) {
            String canonicalPath;
            try {
                canonicalPath = file.getCanonicalPath();
                if (canonicalPath.startsWith(microSD.getAbsolutePath())) {
                    return true;
                }
            } catch (IOException e) {
            }
        }
        return false;
    }

    以上代码参考如下link:

    http://stackoverflow.com/questions/25261178/android-4-4-check-if-path-is-on-secondary-storage


    其他解决办法参考如下:

    http://stackoverflow.com/questions/11281010/how-can-i-get-external-sd-card-path-for-android-4-0/19831522#19831522


    展开全文
  • android 获取外置SD卡路径

    热门讨论 2012-08-30 08:57:33
    系统未提供获取外置SD卡的函数或方法,我们可以用Environment.getExternalStorageDirectory();来获取内置SD卡的路径,但是每款定制过的android 系统的外置SD卡的路径都不一样,那我们怎么才能去获取这个路径呢,我们...
  • Android 获取外置SD卡

    2019-09-29 19:23:41
    真机环境下如何获取内部存储路径和外置SD卡路径。 打开文件管理器可以看到两个目录,分别是内部存储/storage/emulated/0和外置SD卡路径 /storage/9EBB-17EE 其中内部存储根路径,可直接通过Environment....

    真机环境下如何获取内部存储路径和外置SD卡路径。

    打开文件管理器可以看到两个目录,分别是内部存储  /storage/emulated/0  和外置SD卡路径   /storage/9EBB-17EE 

     

    其中内部存储根路径,可直接通过  Environment.getExternalStorageDirectory() 获取。

     

    外置SD卡路径 需要通过反射获取,代码如下

    /**
         * 通过反射调用获取内置存储和外置sd卡根路径(通用)
         *
         * @param mContext    上下文
         * @param is_removale 是否可移除,false返回内部存储路径,true返回外置SD卡路径
         * @return
         */
        private static String getStoragePath(Context mContext, boolean is_removale) {
            String path = "";
            //使用getSystemService(String)检索一个StorageManager用于访问系统存储功能。
            StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
            Class<?> storageVolumeClazz = null;
            try {
                storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
                Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
                Method getPath = storageVolumeClazz.getMethod("getPath");
                Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
                Object result = getVolumeList.invoke(mStorageManager);
    
                for (int i = 0; i < Array.getLength(result); i++) {
                    Object storageVolumeElement = Array.get(result, i);
                    path = (String) getPath.invoke(storageVolumeElement);
                    boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
                    if (is_removale == removable) {
                        return path;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return path;
        }

     

    效果如下

     

    Demo 地址:https://github.com/wgitgame/SDDemo

    转载于:https://www.cnblogs.com/boguse/p/9474866.html

    展开全文
  • Android获取外置SD卡读写路径

    千次阅读 2017-04-21 14:38:15
    1. 外置SD卡的一些问题1.1 关于外置SD卡上的读写路径Android 4.4及以上版本,应用的外置SD卡读写路径被限定在固定路径上(外置SD卡根路径/Android/data/包名/files)。Android4.4以下版本,申请了外置SD卡读写权限的...

    1. 外置SD卡的一些问题

    1.1 关于外置SD卡上的读写路径

    Android 4.4及以上版本,应用的外置SD卡读写路径被限定在固定路径上(外置SD卡根路径/Android/data/包名/files)。

    Android4.4以下版本,申请了外置SD卡读写权限的应用在整个外置SD卡上都有读写权限。

    1.2 关于外置SD卡路径

    另外Android没有提供获取外置SD卡路径的API(getExternalStorageDirectory()获取的实际是内置SD卡路径)。

    2. 获取应用在外置SD卡读写根路径

    Android 4.4以下版本,获取的应该是外置SD卡的根目录(类似/storage/sdcard1)。在Android 4.4及以上版本,获取的是应用在SD卡上的限定目录(外置SD卡根路径/Android/data/包名/files/file)

    代码如下:

    
        public static String getExternalSDPath(Context aContext) {
            String root = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
                root = getExternalSDPathKITKAT(aContext);
                File f = new File(root);
                if (!f.exists()) {
                    try {
                        f.mkdirs();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    if (!f.exists()) {
                        root = null;
                    }
                }
            } else {
                root = getExternalSDCardPath(aContext);
            }
            return root;
        }
    
    
        // Android 4.4及以上版本,获取软件在外置SD卡上的保存路径
        public static String getExternalSDPathKITKAT(Context aContext) {
            String rootPath = getStoragePath(aContext, true);
            if (TextUtils.isEmpty(rootPath)) {
                return null;
            }
            File f = new File(rootPath, "Android/data/" + aContext.getPackageName() + "/files/file");
            String fpath = f.getAbsolutePath();
            return fpath;
        }
    
        // Android 4.4 以下版本获取外置SD卡根目录
        public static String getExternalSDCardPath(Context aContext) {
            HashSet<String> paths = getExternalMounts();
            File defaultPathFile = aContext.getExternalFilesDir(null);
            String defaultPath;
            if (defaultPathFile == null) {
                return null;
            } else {
                defaultPath = defaultPathFile.getAbsolutePath();
            }
            String prefered = null;
            for (Iterator it = paths.iterator(); it.hasNext();) {
                String path = (String) (it.next());
                if (prefered == null && !defaultPath.startsWith(path)) {
                    prefered = path;
                }
            }
            return prefered;
        }
    展开全文
  • Android写入外置sd卡

    2020-01-09 11:14:03
    android9.0保存文件到外置Sd卡 1. 获取外置sd卡根目录 sd卡根目录是类似/storage/0000-0000 这样的路径, 而用runtime.exec("mount"), 或者是用StorageManager.getStorageVolumes()再用反射path获取的路径是/mnt/...
  • Unity程序获取外置SD卡路径方法,包内包含PicoVR SDK,场景安装打包在手机上,可以看到分屏反畸变效果。
  • 原因分析 * 属于非问题 1:当用户的SD卡存储空间少于10M的时候.... 2:全备份不会因为默认存储设置改变而改变,全备份在备份数据...如果存在外置SD卡.都是优先于外置的SD卡.如果没有外置SD卡.就会把数据备份在内置SD卡中...
  • 多用户模式下,外置SD卡,切换到一般用户下或者访客用户下 将SD卡作为便携式存储设备 连接电脑端复制文件到SD卡上,返回前用户,无法插卡到SD卡 想知道如果要实现该怎么解决?
  • 目前越来越多的手机都支持内置SD卡以及外置SD卡(包括OTG)。不少开发者就因为获取外置SD卡路径走了许多弯路,各种查找遍历,还不一定支持了所有机型。最近自己的一个小项目也碰到此问题,找了很多资料,终于找到了...
  • 对于安卓2.3的系统来说,Environment.getExternalStorageDirectory()获取的目录是内置SD卡还是外置SD卡是无法保证的, 和手机厂商的修改有关,只能通过Environment.isExternalStorageRemovable()来判断,如果返回...
  • 本文实例讲述了Android4.4下MediaProvider无法向外置SD卡中文件写数据的解决方法。分享给大家供大家参考,具体如下: Android4.4平台限制应用对外置SD卡的读写权限。MediaProvider通过 checkAccess方法 限制对外置SD...
  • 由于现在大多数手机都是带有内存的,原本获取外置SD卡路径的方法Environment.getExternalStorageDirectory() 获取得到的是手机自身内存的根目录。那么我们要怎么来获取到外置SD卡的路径,首先需要A判断是否挂载了sdk...
  • 获取手机,内置存储、内置sd卡外置SD 卡 路径 2、功能实现 package com.example.ts.myapplication; import android.content.Context; import android.os.Environment; import android.os.storage.StorageManager...
  • 内置外置SD卡路径
  • 今天小编就为大家分享一篇解决Android 5.1限制外置SD卡写入权限的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • andorid中获取内置SD卡和外置SD卡 public String getSdPath(Context context,boolean isOut){ String sdpath=null; if (Build.VERSION.SDK_INT>23){ try { StorageManager sd_storageManager= (St
  • 在Android N上并没有提供直接的方法获取外置SD卡或挂载U盘路径,可以通过下面方法获取内置sd卡路径 Environment.getExternalStorageDirectory().getAbsolutePath(); 通过查看getExternalStorageDirectory源码发现,...
  • 安卓手机是分为“系统文件盘”、“内置sd卡”、“外置sd卡”三部分存储空间吗 基本正确,这3部分是在日常中你实际上可以应用和操作的部分。准确的说应该是“手机内部存储”(也就是data分区)、“内置SD卡(sdcard...
  • 有需求做一些类似文件管理器的,就会用到获取外置可移动SD卡的路径。一般的通过Environment或者Context获取的都是手机自带的存储卡路径,类似storage/emulated/0/加后缀。由于谷歌之后的意思是像ios一样,不支持外置...
  • Android 获取APP数据库 和获取外置SD卡的方法
  • 网上绝大部分软件只能对内置SD卡加密,本软件突破常规,可以对手机外置SD卡文件进行加密,不仅是图片视频,其他文档之类的文件都支持加密。这个功能首屈一指,恐怕是网上唯一一个此类软件。支持手机桌面伪装成计算器...
  • Android判断是否挂载外置sd卡

    千次阅读 2018-09-04 09:32:02
    最近程序中需要查看sd卡是否挂载,在网上看到有用Environment.MEDIA_MOUNTED来判断是否有sd卡,但实际上Environment.getExternalStorageState()得到的手机内置sd卡的状态...这里有一种方法查看外置sd卡,使用Storag...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼最近写一个测试机顶盒的APK,需求是播放外置SD卡中的视频。现在有的手机用Environment.getExternalStorageDirectory().getAbsolutePath();这个方法获取到的是内置存储的...
  • android 系统没有获取外置SD卡的函数可调用,所以我们可以想到其它的办法来获取,在这项代码中有一个Dev_MountInfo的类,使用方法: Dev_MountInfo dev = Dev_MountInfo.getIntance(); 得到内置卡信息: Dev_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 700
精华内容 280
关键字:

外置sd卡