本文实例为大家分享了android通过usb读取U盘的具体代码,供大家参考,具体内容如下

1.关联 compile ‘com.github.mjdev:libaums:+'

2.权限设置

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.hardware.usb.host" android:required="false" />
<uses-feature android:name="android.hardware.usb.host" android:required="true" />

3.监听u盘 插入拔出的广播

 //监听otg插入 拔出IntentFilter usbDeviceStateFilter = new IntentFilter();usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);mContext.registerReceiver(UDiskMountedReceiver, usbDeviceStateFilter);//注册监听自定义广播IntentFilter filter = new IntentFilter(Constant.ACTION_USB_PERMISSION);mContext.registerReceiver(UDiskMountedReceiver, filter);

4.代码

package com.zb.usbtest;/*** @项目名: UsbTest * @包名: com.zb.usbtest* @文件名: ReadUDisk* @创建者: 25934* @创建时间: 2018-07-24 13:50* @描述: TODO*/import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbManager;
import android.util.Log;
import com.github.mjdev.libaums.UsbMassStorageDevice;
import com.github.mjdev.libaums.fs.FileSystem;
import com.github.mjdev.libaums.fs.UsbFile;
import com.github.mjdev.libaums.partition.Partition;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import static com.zb.usbtest.Constant.ACTION_USB_PERMISSION;public class ReadUDisk {private UDiskCallBack.OnUDiskCallBack mOnUDiskCallBack = null;private Context    mContext;private UsbMassStorageDevice[] storageDevices;private List<UsbFile> usbFiles = new ArrayList<>();private final UsbManager mUsbManager;public ReadUDisk(Context context) {mContext = context;mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);}/*** 接受U盘插入和拔出事件* @param onUDiskCallBack*/public void setOnUDiskCallBack(UDiskCallBack.OnUDiskCallBack onUDiskCallBack) {if (mOnUDiskCallBack == null) {registerReceiver();mOnUDiskCallBack = onUDiskCallBack;}}/*** 注册广播接收者*/public void registerReceiver() {//监听otg插入 拔出IntentFilter usbDeviceStateFilter = new IntentFilter();usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);mContext.registerReceiver(UDiskMountedReceiver, usbDeviceStateFilter);//注册监听自定义广播IntentFilter filter = new IntentFilter(Constant.ACTION_USB_PERMISSION);mContext.registerReceiver(UDiskMountedReceiver, filter);Log.e("ReadUDisk", "registerReceiver: ");}/*** 注销广播接收者*/public void unReisterReceiver() {if (UDiskMountedReceiver != null) {mContext.unregisterReceiver(UDiskMountedReceiver);}}/*** 检查usb设备的权限* @param device* @return*/public boolean checkPerssion(UsbMassStorageDevice device) {if (mUsbManager==null){return false;}if (mUsbManager.hasPermission(device.getUsbDevice())) {//有就直接读取设备是否有权限return true;} else {return false;}}/*** 读取当前usb设备的数量* @return*/public int getDeviceCount() {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext);return storageDevices.length;}/*** 根据position获取usb设备* @param position* @return*/public UsbMassStorageDevice getUsbMassDevice(int position) {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext);if (position > storageDevices.length) {return null;} else {return storageDevices[position];}}/*** 获取usb上所有的存储设备* @return*/public UsbMassStorageDevice[] getUsbMassAllDevice() {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext);return storageDevices;}/*** 根据设备获取路径* @param device* @return*/public FileSystem readDevice(UsbMassStorageDevice device) {try {if (!checkPerssion(device)){ //检查是否有权限return null;}device.init();//使用设备之前需要进行 初始化Partition partition = device.getPartitions().get(0); //仅使用设备的第一个分区FileSystem currentFs = partition.getFileSystem();// currentFs.getCapacity(); //容量大小// currentFs.getOccupiedSpace(); //已使用大小// currentFs.getFreeSpace(); //未使用的大小UsbFile root  = currentFs.getRootDirectory();//获取根目录String deviceName = currentFs.getVolumeLabel();//获取设备标签return currentFs;} catch (Exception e) {e.printStackTrace();return null;}}/*** 获取U盘的文件和文件夹路径* @param fileSystem* @return*/public List<UsbFile> getUsbFiles(FileSystem fileSystem) {usbFiles.clear();try {for (UsbFile file : fileSystem.getRootDirectory().listFiles()) { //将所以文件和文件夹路径添加到usbFiles数组中usbFiles.add(file);}Collections.sort(usbFiles, new Comparator<UsbFile>() {//简单排序 文件夹在前 文件在后@Overridepublic int compare(UsbFile oFile1, UsbFile oFile2) {return oFile1.isDirectory()? -1: 1;}});} catch (IOException e) {e.printStackTrace();}return usbFiles;}private BroadcastReceiver UDiskMountedReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();switch (action) {case ACTION_USB_PERMISSION: //自定义权限广播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onPermissionCallBack();}break;case UsbManager.ACTION_USB_DEVICE_ATTACHED: //usb设备插入广播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onAttachDeviceCallBack();}break;case UsbManager.ACTION_USB_DEVICE_DETACHED: //usb设备拔出广播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onDetachDeviceCallBack();}break;}}};
}

android通过usb读取U盘的方法相关推荐

  1. android u盘广播,android通过usb读取U盘的方法

    本文实例为大家分享了android通过usb读取U盘的具体代码,供大家参考,具体内容如下 1.关联 compile 'com.github.mjdev:libaums:+' 2.权限设置 3.监听u盘 ...

  2. android 通过usb读取 U盘

    关联 compile 'com.github.mjdev:libaums:+' 权限设置 <uses-permission android:name="android.permissi ...

  3. android免root读写u盘最新方法,支持安卓Q+

    android读写u盘支持安卓10以上的最新方法 本人是在写一个app需要读取u盘文件列表,网上找了好多方法,要不就是没有media权限,要不就是收不到广播,全部用不了,就这样搁置了一段时间终于又找到 ...

  4. android通过USB读取身份证信息

    一.USB的通信流程 搜索设备->建立连接->通信 , 全部代码请 "戳这" 1.搜索设备 /*** 获取目标UsbDevice* @param view*/publi ...

  5. 为什么我的u盘计算机无法识别u盘启动,电脑无法识别u盘怎么办 无法读取u盘解决方法...

    大家在使用电脑时会经常遇到U盘无法读取,u盘无法识别.一般由以下故障超成的: 1.U盘本身故障,如果U盘坏了,肯定读不出来了; 这种问题,我们可以换个电脑,或者别的USB可以用,但U盘插上却无任何反应 ...

  6. 在Android上修改读取IMEI码的方法

    我们知道,如果是移动设备,厂家都提供了IMEI码写入及读出的方法.但由于我们的是非移动设备,可是我们也需要写入IMEI码,供第三方的软件读取,如正版地图等.我们找到frameworks/base/te ...

  7. u盘安卓linux,Android/Linux USB OTG U盘的挂载问题

    问题:通过otg可以识别到USB鼠标,但插上U盘却不识别. 问题分析:怀疑是USB otg的menuconfig没有配置. 问题处理: 1.make menuconfig进入config的配置 2.配 ...

  8. Android脱离USB执行Shell脚本的方法

    前言: 安卓自动化测试过程中,经常需要测试机脱离 Usb执行相关 shell 脚本,之前在网上看了很多的例子,没有真正可以直接断开 USB执行 shell 脚本的实例,所以一直也没太搞明白,最近有时间 ...

  9. ubuntu linux读取U盘

    VMware虚拟机怎么连接U盘 | VMware读取U盘的设置方法 转载地址:http://www.xitongcheng.com/jiaocheng/xtazjc_article_15126.htm ...

最新文章

  1. 记录一次【模仿真实环境】的内网漫游
  2. 基础的VueJS面试题(附答案)
  3. 【最新】2020年4月学术会议变动汇总
  4. gradle中的build script详解
  5. mysql基础_月隐学python第22课
  6. 动态规划算法之数塔问题
  7. 深度优先搜索算法的通用解法
  8. .Net开发人员通过WCF使用Node.js
  9. DevExpress.XtraGrid 导出文本的bug
  10. SQL 高效的万能分页存储过程
  11. linux合并ts文件吗,UNIX LINUX MACOS shell 下载合并*.ts视频
  12. 三边测量定位算法C语言实现
  13. linux查看占用负载的程序,Linux中查看负载
  14. 1-开发环境--android文件系统的结构
  15. 计蒜客 蒜头君的积木
  16. C指针原理(32)--C语言-pvm并行计算
  17. 惊!Go里面居然有这样精妙的小函数!
  18. python 共享内存 c_python共享内存 - DK's Blog - 博客园
  19. 2020 CUMCM全国大学生数学建模竞赛 A题 Notes
  20. matlab函数用法

热门文章

  1. 笔记本网卡总断连,如何使得网卡不自动休眠?
  2. 菜肴制作(拓扑排序) 题解
  3. jsp分页功能的实现
  4. 实验.cc域名与.com域名在百度的权重谁高谁低
  5. 数据结构(严蔚敏C语言版)代码实现持续更新中
  6. SSM毕设项目 - 基于SSM的企业公寓宿舍后勤管理系统(含源码+论文)
  7. 科创板一年突破1.7万亿的最全真相 | 钛媒体封面特刊
  8. 8月份补丁更新:微软修补了121个安全漏洞
  9. 计算机考证有机构培训吗
  10. Dynamic Bone(Unity拖尾插件)使用说明