关联 compile ‘com.github.mjdev:libaums:+’

权限设置

监听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);

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 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 getUsbFiles(FileSystem fileSystem) {

usbFiles.clear();

try {

for (UsbFile file : fileSystem.getRootDirectory()

.listFiles()) { //将所以文件和文件夹路径添加到usbFiles数组中

usbFiles.add(file);

}

Collections.sort(usbFiles, new Comparator() {//简单排序 文件夹在前 文件在后

@Override

public int compare(UsbFile oFile1, UsbFile oFile2) {

return oFile1.isDirectory()

? -1

: 1;

}

});

} catch (IOException e) {

e.printStackTrace();

}

return usbFiles;

}

private BroadcastReceiver UDiskMountedReceiver = new BroadcastReceiver() {

@Override

public 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 u盘加载_[转] android 通过usb读取 U盘相关推荐

  1. 服务器怎么用u盘加载硬盘驱动,戴尔服务器安装用U盘加载硬盘控制卡驱动.pdf

    戴尔服务器安装用U盘加载硬盘控制卡驱动 支持9G,10G,11G 安装windows2003,并且2003 最好带SP2 补丁,不然可能出现蓝屏死机等现象.8G 暂时没有测 试. 使用该软件后,U 盘 ...

  2. android 自定义图片加载动画效果,Android自定义加载动画-感染体

    Android自定义动画系列七,今天来分享第七个自定义Loading动画(InfectionBallBuilder),看上去感觉有种病毒源被感染的感觉,所以名字就叫感染体,这个动画做出来的效果,我不怎 ...

  3. linux u盘加载阵列卡驱动步骤,Linux操作系统U盘加载阵列卡驱动步骤.doc

    思路 如果没有Linux的机器,可以使用安装光盘的Linux环境:将盘完全格式化,将驱动拷贝到U盘,将U盘插在服务器上,用Linux安装光盘第一张启动到图形安装界面,按Ctrl+Alt+F2切换到控制 ...

  4. android 涨潮动画加载_潮汐app下载 潮汐 (睡眠白噪音番茄钟) for Android V3.9.1 安卓手机版 下载-脚本之家...

    潮汐app是一款适用于安卓手机端的睡眠.专注与冥想的白噪音番茄钟应用,帮助你从快节奏的当下抽离,进入另一个平和安静的时空,里面提供各种自然声音任你选择,让你的身心回归自然,冥想更自在,还能帮你检测一晚 ...

  5. android 涨潮动画加载_潮汐app怎么使用?潮汐app各功能测评介绍

    拖延症可能是一种绝症,原因是你每次下定决心后,往往草草了事.总是会有各种诱惑还有鸡毛蒜皮的事来打断你. 碎片时间应该变成块状时间,于是手机里有了番茄工作法相关的应用. 第 274 期豌豆荚设计奖,我们 ...

  6. Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)

    我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先 ...

  7. 安卓学习笔记---Android仿美团加载数据、小人奔跑进度动画对话框(以及顺丰快递员奔跑效果)

    最近要加一个动态的加载功能,类似于美团的效果,这篇文章写的很好,可以借鉴 博客地址: http://blog.csdn.net/jdsjlzx/article/details/43489395 我们都 ...

  8. android登陆加载加载_如何在Android上侧面加载应用

    android登陆加载加载 Just because an app isn't available from the Google Play Store doesn't mean it's not a ...

  9. Android中WebView加载sdcard中的html时提示:ERR_FILE_NOT_FOUND和ERR_ACCESS_DENIED

    场景 Android中WebView加载sdcard中的html显示: Android中WebView加载sdcard中的html显示_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在实 ...

  10. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

最新文章

  1. oracle里minis用法,Oracle初学者必知的39个问题
  2. 回归ASP,学习ADO,熟悉VBScript
  3. json list格式_来来来,一文让你读懂Cocos Creator如何读写JSON文件
  4. 一台古老电脑之维修记
  5. getResource(String name)用法及源码分析
  6. 使用sikuli和Arquillian测试HTML5 canvas应用程序
  7. 台式电脑键盘字母乱了_电脑键盘上的一个不起眼的按键,特别实用却被粗心的人忽略...
  8. 使用Docker运行oracle11g企业版和简单配置
  9. 一周工作所用的日常 Git 命令
  10. [渝粤教育] 西南科技大学 旅客运输组织 在线考试复习资料
  11. pandas数据归一化方法
  12. 关于来料检验中多退货的问题
  13. zemax光学设计高阶优化
  14. 语音驱动嘴型与面部动画生成的现状和趋势
  15. 微信 h5(公众号)简单登录
  16. xp系统如何更改计算机用户名,windows xp电脑如何设置、修改开机密码
  17. 记一次刷票过程的感想
  18. win10使用markdownpad2报错 An error occurred with the HTML rendering component. This issue may be fixed b
  19. chapter3 动态分析基础技术-01在线沙箱 微步云沙箱
  20. 01旭锋集团运营平台v2项目概述

热门文章

  1. Python一路走来 DAY15 Javascript
  2. 移动应用支付宝开发创建应用_2020年可与十大移动应用开发公司合作
  3. python大作业黑白棋_计算概论大作业——黑白棋AI设计
  4. 无线传输 android下载,无线文件传输 WiFi File Transfer
  5. PHPCMS 模板调用标签大全
  6. pip install deepforest 失败
  7. java京东秒杀_小猿圈Python之实现京东秒杀功能技巧
  8. activities工作流入门笔记-001-建表
  9. 遍历二叉树的神级方法
  10. 掌阅 兼容性测试 结果