android u盘加载_[转] android 通过usb读取 U盘
关联 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盘相关推荐
- 服务器怎么用u盘加载硬盘驱动,戴尔服务器安装用U盘加载硬盘控制卡驱动.pdf
戴尔服务器安装用U盘加载硬盘控制卡驱动 支持9G,10G,11G 安装windows2003,并且2003 最好带SP2 补丁,不然可能出现蓝屏死机等现象.8G 暂时没有测 试. 使用该软件后,U 盘 ...
- android 自定义图片加载动画效果,Android自定义加载动画-感染体
Android自定义动画系列七,今天来分享第七个自定义Loading动画(InfectionBallBuilder),看上去感觉有种病毒源被感染的感觉,所以名字就叫感染体,这个动画做出来的效果,我不怎 ...
- linux u盘加载阵列卡驱动步骤,Linux操作系统U盘加载阵列卡驱动步骤.doc
思路 如果没有Linux的机器,可以使用安装光盘的Linux环境:将盘完全格式化,将驱动拷贝到U盘,将U盘插在服务器上,用Linux安装光盘第一张启动到图形安装界面,按Ctrl+Alt+F2切换到控制 ...
- android 涨潮动画加载_潮汐app下载 潮汐 (睡眠白噪音番茄钟) for Android V3.9.1 安卓手机版 下载-脚本之家...
潮汐app是一款适用于安卓手机端的睡眠.专注与冥想的白噪音番茄钟应用,帮助你从快节奏的当下抽离,进入另一个平和安静的时空,里面提供各种自然声音任你选择,让你的身心回归自然,冥想更自在,还能帮你检测一晚 ...
- android 涨潮动画加载_潮汐app怎么使用?潮汐app各功能测评介绍
拖延症可能是一种绝症,原因是你每次下定决心后,往往草草了事.总是会有各种诱惑还有鸡毛蒜皮的事来打断你. 碎片时间应该变成块状时间,于是手机里有了番茄工作法相关的应用. 第 274 期豌豆荚设计奖,我们 ...
- Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先 ...
- 安卓学习笔记---Android仿美团加载数据、小人奔跑进度动画对话框(以及顺丰快递员奔跑效果)
最近要加一个动态的加载功能,类似于美团的效果,这篇文章写的很好,可以借鉴 博客地址: http://blog.csdn.net/jdsjlzx/article/details/43489395 我们都 ...
- android登陆加载加载_如何在Android上侧面加载应用
android登陆加载加载 Just because an app isn't available from the Google Play Store doesn't mean it's not a ...
- Android中WebView加载sdcard中的html时提示:ERR_FILE_NOT_FOUND和ERR_ACCESS_DENIED
场景 Android中WebView加载sdcard中的html显示: Android中WebView加载sdcard中的html显示_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在实 ...
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...
最新文章
- oracle里minis用法,Oracle初学者必知的39个问题
- 回归ASP,学习ADO,熟悉VBScript
- json list格式_来来来,一文让你读懂Cocos Creator如何读写JSON文件
- 一台古老电脑之维修记
- getResource(String name)用法及源码分析
- 使用sikuli和Arquillian测试HTML5 canvas应用程序
- 台式电脑键盘字母乱了_电脑键盘上的一个不起眼的按键,特别实用却被粗心的人忽略...
- 使用Docker运行oracle11g企业版和简单配置
- 一周工作所用的日常 Git 命令
- [渝粤教育] 西南科技大学 旅客运输组织 在线考试复习资料
- pandas数据归一化方法
- 关于来料检验中多退货的问题
- zemax光学设计高阶优化
- 语音驱动嘴型与面部动画生成的现状和趋势
- 微信 h5(公众号)简单登录
- xp系统如何更改计算机用户名,windows xp电脑如何设置、修改开机密码
- 记一次刷票过程的感想
- win10使用markdownpad2报错 An error occurred with the HTML rendering component. This issue may be fixed b
- chapter3 动态分析基础技术-01在线沙箱 微步云沙箱
- 01旭锋集团运营平台v2项目概述