当前位置: 首页 > 面试题库 >

在Android中访问USB大容量存储设备

赵元白
2023-03-14
问题内容

因此,我将这根小电缆插入您的手机,该手机的另一侧具有USB端口,例如,您可以在其中插入闪存驱动器

当我插入闪存驱动器时,我收到一条通知,内容为:

已连接USB大容量存储

然后,当我启动文件浏览器应用程序时,我可以看到驱动器
位于:

/ storage / UsbDriveA /

太好了,但是我想知道如何在
代码中访问闪存驱动器。轻松访问SD卡:

File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard.getAbsolutePath() + "/MyFiles")
directory.mkdirs();

但是,对于闪存驱动器,您将如何做呢?提前致谢!


问题答案:

在此示例中,我使用的是来自Apache的FileUtils,但是如果不使用它,您将看到用于读取USB闪存驱动器的逻辑:

private UsbManager usbManager;
private UsbDevice clef;
ArrayList<File> images;

usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
clef = null;

if (usbManager != null)
{
    HashMap<String,UsbDevice> deviceList = usbManager.getDeviceList();
    if (deviceList != null)
    {
        Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
        while (deviceIterator.hasNext()) {
            clef = deviceIterator.next();
        }
    }
}

if (clef != null)
{
    File directory  = new File("/storage/UsbDriveA/");
    if (directory != null) {
        if (directory.canRead()) {

            images = new ArrayList<File>();
            String[] imageExtensions = {"jpg","jpeg","png","gif","JPG","JPEG","PNG","GIF"};
            Iterator<File> iterateImages = FileUtils.iterateFiles(directory, imageExtensions, true);
            while (iterateImages.hasNext()) {
                File theImage = iterateImages.next();
                if (!theImage.getName().startsWith(".", 0))
                    images.add(theImage);
            }

            // custom process / methods... not very relevant here : 
            imageIndex = 0;
            scale = 1.0f;
            countImgs = images.size();
            loadImage(imageIndex);
        }
    }
}

In my manifest I have those lines, although I’m not sure they’re all
mandatory…

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />


 类似资料:
  • 所以我有一个小电缆,你可以插入你的手机,在另一边有一个USB端口,你可以在那里插入闪存驱动器,比如,你可以在这里看到: 当我插入闪存驱动器时,我得到一个通知,上面写着: 已连接USB大容量存储器

  • 问题内容: 我有一个连接到Android设备的外部大容量存储设备。在根目录中,有几个.BIN文件需要读取到我的应用程序中。我能够连接到设备并使用UsbDeviceConnection接收USB许可。 连接后,我可以看到我有一个带有2个批量传输端点的大容量存储接口(一进一出)。 当使用usbConnection.bulkTransfer时,我收到-1返回和一个空缓冲区。因此,我在接收数据时遇到了麻烦

  • 我正在尝试获取文件名(以及文件路径),从作为usb大容量存储的Garmin设备。将设备连接到计算机,文件路径为g:\garmin。使用OTG和Explorer将其连接到android平板(我检查了应用程序设置-包名为:com.android.rk),文件路径为USB/Garmin。使用ES文件资源管理器,我已经看到文件路径是mnt/usb_storage/garmin。因此,在代码中,当我试图从文

  • 我有一个应用程序,应该给一些USB大容量存储设备的许可。因此,阻止USB大容量存储设备的方法不应该是非常静态的!

  • 我正试图实现一些清理工具。越来越多的制造商出于某种“安全原因”禁止根设备,禁止不请求解锁。 在API28之后,这段代码将出现错误: 但我相信将来会被杀的。 那么,有什么优雅的方法来管理SDCard吗?

  • 问题内容: 在许多android设备上,当设备插入计算机的USB端口或什至在某些USB充电设备上时,手机都会进入USB存储模式。当设备处于此模式时,Android应用无法访问sdcard。有什么方法(1)检测设备何时处于此模式,以及(2)以编程方式(至少暂时)关闭USB存储设备,以便我的Android应用程序可以访问sdcard? 问题答案: 您可以检测到它(有了链接),但是AFAIK至少不能使用