Android Tv U盘路径获取

         近期的碰到一个项目,需要读取U盘中的资源文件和配置文件。经过几种不同的盒子测试发现,如下方法获取到的U盘路径比较准确,在此做一个简单记录。

public String GetUsbPath() {
    String strMountInfo = "";

    // 1.首先获得系统已加载的文件系统信息
    try {
        // 创建系统进程生成器对象
        ProcessBuilder objProcessBuilder = new ProcessBuilder();
        // 执行 mount -h 可以看到 mount : list mounted filesystems
        // 这条命令可以列出已加载的文件系统
        objProcessBuilder.command("mount"); // 新的操作系统程序和它的参数
        // 设置错误输出都将与标准输出合并
        objProcessBuilder.redirectErrorStream(true);
        // 基于当前系统进程生成器的状态开始一个新进程,并返回进程实例
        Process objProcess = objProcessBuilder.start();
        // 阻塞线程至到本地操作系统程序执行结束,返回本地操作系统程序的返回值
        objProcess.waitFor();

        // 得到进程对象的输入流,它对于进程对象来说是已与本地操作系统程序的标准输出流(stdout)相连接的
        InputStream objInputStream = objProcess.getInputStream();

        byte[] buffer = new byte[1024];

        // 读取 mount 命令程序返回的信息文本
        while (-1 != objInputStream.read(buffer)) {
            strMountInfo = strMountInfo + new String(buffer);
        }

        // 关闭进程对象的输入流
        objInputStream.close();

        // 终止进程并释放与其相关的任何流
        objProcess.destroy();
    } catch (Exception e) {
        e.printStackTrace();
    }

    // 2.然后再在系统已加载的文件系统信息里查找 SD 卡路径
    // mount 返回的已加载的文件系统信息是以一行一个信息的形式体现的,
    // 所以先用换行符拆分字符串
    String[] lines = strMountInfo.split("\n");

    // 清空该字符串对象,下面将用它来装载真正有用的 SD 卡路径列表
    strMountInfo = "";

    for (int i = 0;
         i < lines.length;
         i++) {
        // 如果该行内有 /mnt/和 vfat 字符串,说明可能是内/外置 SD 卡的挂载路径
        if (-1 != lines[i].indexOf(" /mnt/") && // 前面要有空格,以防断章取义
                -1 != lines[i].indexOf(" vfat "))  // 前后均有空格
        {
            // 再以空格分隔符拆分字符串
            String[] blocks = lines[i].split("\\s"); // \\s 为空格字符
            for (int j = 0;
                 j < blocks.length;
                 j++) {
                // 如果字符串中含有/mnt/字符串,说明可能是我们要找的 SD 卡挂载路径
                if (-1 != blocks[j].indexOf("/mnt/")) {
                    // 排除重复的路径
                    if (-1 == strMountInfo.indexOf(blocks[j])) {
                        // 用分号符(;)分隔 SD 卡路径列表,
                        strMountInfo += blocks[j];      //此处位一个插入一个U盘时的路径,如果U盘过多可能拼到一起。
                    }
                }
            }
        }
    }

    return strMountInfo;
}

 

Android获取U路径是一个相对复杂的过程,因为不同的设备和系统可能会有不同的实现方式。以下是一种尝试获取U路径的常见方法: ```java import android.content.Context; import android.os.Environment; import android.os.storage.StorageManager; import java.io.File; import java.lang.reflect.Method; public class UsbUtil { public static String getUsbPath(Context context) { StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); Method getVolumePathsMethod; try { getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths"); String[] volumePaths = (String[]) getVolumePathsMethod.invoke(storageManager); for (String path : volumePaths) { File file = new File(path); if (file.exists() && file.isDirectory() && file.canRead() && isUsb(file)) { return path; } } } catch (Exception e) { e.printStackTrace(); } return null; } private static boolean isUsb(File file) { String deviceName = file.getName(); return deviceName.toLowerCase().contains("usb"); } } ``` 这段代码使用了反射的方式来获取存储设备的路径。它会遍历所有可用的存储设备路径,并判断是否为U。如果找到了U路径,则返回该路径;否则返回null。 示例用法: ```java String usbPath = UsbUtil.getUsbPath(context); if (usbPath != null) { // 找到了U路径 // 进行相应的操作,如复制文件等 } else { // 没有找到U路径 } ``` 请注意,代码中使用了反射,这可能会因设备和系统的差异而导致兼容性问题。此外,由于Android设备的不同厂商和版本可能会有所不同,因此上述代码可能需要进行适当的调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值