需要开通系统权限android:sharedUserId=“android.uid.system”

1.判断U盘是否挂载

const val TYPE_STORAGE_USB = 2
fun checkStorageIsMount(ctx: Context, storageType: Int = TYPE_STORAGE_USB): Boolean {var isMounted = falseval sm: StorageManager = ctx.getSystemService(Context.STORAGE_SERVICE) as StorageManagerval volumeList = SysApiInvoke.getVolumeList(sm)val storagePrefix: String = if (storageType == TYPE_STORAGE_SD) {lastSDPrefix =SysApiInvoke.getSysProp(SDC_PREFIX)lastSDPrefix} else {lastUsbPrefix =SysApiInvoke.getSysProp(USB1_PREFIX)lastUsbPrefix}for (volume in volumeList) {if (volume.isRemovable) {val usbPath: String =SysApiInvoke.getVolumePath(volume)if (SysApiInvoke.getVolumeState(sm,usbPath) == Environment.MEDIA_MOUNTED) {val prefix = usbPath.substring(usbPath.lastIndexOf("/") + 1)if (prefix == storagePrefix) {isMounted = truebreak}}}}return isMounted}

2.获取U盘对应的存储路径

fun checkStorageIsMount(ctx: Context, storageType: Int = TYPE_STORAGE_USB): Boolean {var isMounted = falseval sm: StorageManager = ctx.getSystemService(Context.STORAGE_SERVICE) as StorageManagerval volumeList = SysApiInvoke.getVolumeList(sm)val storagePrefix: String = if (storageType == TYPE_STORAGE_SD) {lastSDPrefix =SysApiInvoke.getSysProp(SDC_PREFIX)lastSDPrefix} else {lastUsbPrefix =SysApiInvoke.getSysProp(USB1_PREFIX)lastUsbPrefix}for (volume in volumeList) {if (volume.isRemovable) {val usbPath: String =SysApiInvoke.getVolumePath(volume)if (SysApiInvoke.getVolumeState(sm,usbPath) == Environment.MEDIA_MOUNTED) {val prefix = usbPath.substring(usbPath.lastIndexOf("/") + 1)if (prefix == storagePrefix) {isMounted = truebreak}}}}return isMounted}

3.获取所有的图片文件

// file 即第二步获取到的U盘对应的存储路径
fun getAllImageFile(file: File): ArrayList<File> {val result = ArrayList<File>()if (file.isDirectory) {val options = BitmapFactory.Options()options.inJustDecodeBounds = truefor (listFile in file.listFiles()) {if (listFile.isFile) {BitmapFactory.decodeFile(listFile.absolutePath, options)if (options.outWidth != -1 && options.outHeight != -1) {result.add(listFile)}}}}return result}
// 判断是否包含图片
private fun isHaveImage(file: File): Boolean {val list = file.listFiles()if (list != null) {val options = BitmapFactory.Options()options.inJustDecodeBounds = truefor (listFile in list) {if (listFile.isFile) {BitmapFactory.decodeFile(listFile.absolutePath, options)if (options.outWidth != -1 && options.outHeight != -1) {return true}}}}return false}
系统的 API
object SysApiInvoke {@Suppress("JAVA_CLASS_ON_COMPANION")@SuppressLint("PrivateApi")fun setSysProp(prop: String, value: String = "") {try {val systemProperties = Class.forName("android.os.SystemProperties")val set = systemProperties.getMethod("set", java.lang.String::class.java, java.lang.String::class.java)set.invoke(systemProperties, prop, value)} catch (e: Exception) {e.printStackTrace()}}@Suppress("JAVA_CLASS_ON_COMPANION")@SuppressLint("PrivateApi")fun getSysProp(prop: String, defValue: String = ""): String {return try {val systemProperties = Class.forName("android.os.SystemProperties")val get = systemProperties.getMethod("get", java.lang.String::class.java, java.lang.String::class.java)val rst = get.invoke(systemProperties, prop, defValue)rst as String} catch (e: Exception) {e.printStackTrace()defValue}}@Suppress("UNCHECKED_CAST")fun getVolumeList(sm: StorageManager): Array<StorageVolume> {return try {val getMethod = sm.javaClass.getMethod("getVolumeList")val rst = getMethod.invoke(sm)rst as Array<StorageVolume>} catch (e: Exception) {e.printStackTrace()emptyArray()}}@Suppress("UNCHECKED_CAST", "JAVA_CLASS_ON_COMPANION")fun getVolumeState(sm: StorageManager, path: String): String {return try {val getMethod = sm.javaClass.getMethod("getVolumeState", java.lang.String::class.java)val rst = getMethod.invoke(sm, path)rst as String} catch (e: Exception) {e.printStackTrace()""}}@Suppress("UNCHECKED_CAST")fun getVolumePath(volume: StorageVolume): String {return try {val getMethod = volume.javaClass.getMethod("getPath")val rst = getMethod.invoke(volume)rst as String} catch (e: Exception) {e.printStackTrace()""}}
}

获取U盘里面的图片文件相关推荐

  1. python 获取指定目录下的图片文件

    import os#获取指定路径下所有的图片文件 def listfile(dirpath):# pathdir = os.listdir(dirpath) #图片列表imgFileList = os ...

  2. Java实现图片文件的上传和获取

    在做一个网站开发时,难免会遇到图片等文件的上传和获取,举一个简单的例子,就是用户的头像问题,我们应该怎么上传,怎么获取,上传到哪呢,等一系列的问题,其实像图片这些文件,存储在云存储空间比较合适,但是收 ...

  3. c盘java文件误删_java获取C盘下的隐藏目录文件名称

    题记 --  执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 网易云课堂 在Java中, File类用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作. Fil ...

  4. C++:获取图片文件信息-图片名称、类型、像素宽高

    转自:C++ 获取图片文件信息 - 席纳霍霍 - 博客园 参考:图片头文件信息解析_adzcsx2的博客-CSDN博客_图片头文件 #include <gl/glut.h> #includ ...

  5. iOS获取ipa素材、提取ipa资源图片文件

    当我们看到一款优秀的App时,我们可能对它的一些素材比较感兴趣,或者我们也想仿写一款类似app,那么怎么能获取到它的素材资源文件呢? 下面我以ofo举例: 1.打开iTunes,搜索ofo关键字,选择 ...

  6. java获取C盘下的隐藏目录文件名称

    题记   --  执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天.    网易云课堂 Flutter开发中的点滴积累 在Java中, File类用来将文件或者文件夹封装成对象,方便 ...

  7. php返回图片二进制字节数组,获取图片文件的二进制数组

    这段时间在项目里面遇到一个问题,c#后台调用php的webservice传送图片到php服务端,于是采用了传递二进制数组的方法,方法如下(部分代码): dName是图片文件的名称, string fp ...

  8. 前端JS获取图片文件的真实格式

    目录 常见方式判断图片格式 图像数据简单说明 JS读取图片真实格式 svg格式的判断 总结 前面博文有提到,当前主流浏览器能支持的图片格式,是七种:jpg.png.gif.bmp.ico.webp.s ...

  9. 百度网盘助手-获取网盘文件的下载地址,破解限速

    众所周知,百度网盘的文件已经对非会员进行了各种限速.不过由于国内其他网盘基本都残废了,百度网盘作为仅存的少数几个,需求还是很大的,经常会碰到别人分享的百度网盘文件夹.  今天介绍的这种方法就是通过 c ...

最新文章

  1. offsetLeft 、offsetWidth、scrollHeight等的区别
  2. 关于创业公司的一些事情
  3. Oracle 常用的一些函数
  4. ASP.NET Core 2.0身份和角色管理入门
  5. class根据状态 vue_搞懂并学会运用 Vue 中的无状态组件
  6. 想自学python看哪位的视频比较好-Python入门视频看哪个好?适合初学者的教学视频推荐...
  7. 开课吧Java:微服务设计遵循的规约有哪些?
  8. Hbase 操作工具类
  9. powerbuilder mysql_powerbuilder+mysql5.0的连接过程 | 学步园
  10. 冒泡排序java简单实现
  11. MT【252】椭圆内接三角形内切圆半径
  12. Win10/edge主页被360,hao123篡改主页问题解决办法2022
  13. 2019-2021 文本生成图片 Text To Image(T2I) Synthesis 论文整理
  14. android跳过网络连接,绕过Android Android的Wi-Fi热点5设备连接限制 | MOS86
  15. C语言--指针作为数组参数获取数组平均数
  16. 原创|我常用的3款脑图工具
  17. 网页歌单html制作,网页内嵌网易云插件全程(包括生成自己歌单的外链)
  18. MAC install torch
  19. 动量守恒和角动量守恒结果不同可能原因
  20. OSI模型及数据封装过程

热门文章

  1. expect脚本中使用普通用户执行sh脚本命令,expect脚本中解决``反引号获取值有问题方法、expect遍历登录不同主机不同密码的主机执行指定命令方法
  2. springboot使用websocket时,打成war包,发布到服务器,项目启动报错问题
  3. 30个极致实用的谷歌浏览器插件,让你开发事半功倍
  4. glew和glfw区别
  5. manjaro双系统 windows_win10环境下安装manjaro kde(双系统)
  6. Everything实现快速搜索的原理
  7. matlab实现ENVI2%线性拉伸及底图上画双坐标系剖面线
  8. arguments,callee,caller
  9. 小程序之后台交互--个人中心
  10. 【硬核】教你几招,如何快速把一个团队搞垮?