Android如何检测外置卡的状态及内置SDcard状态

2024-08-31 00:18

本文主要是介绍Android如何检测外置卡的状态及内置SDcard状态,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

外置卡状态检测操作,实际上是反射StorageManager这个类,调用StorageManager类里面的getVolumeState私有方法得到,代码实现方式如下:

package com.asir.mediaplayer;import java.util.ArrayList;import android.content.Context;
import android.os.Environment;
import android.os.storage.StorageManager;import android.util.Log;import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;/*** @brief This class provides a number of function that can get storage device*        paths/state or mount/umount storage devices to the upper application.**/
public class EnvironmentManager {private static final String LOG_TAG = "Asir";private static final String SD_PATH_MARK = "ext_sd";private static final String USB_PATH_MARK = "udisk";private StorageManager sm;/*** Constructor* * @param ctx*            Activity Context***/public EnvironmentManager(Context ctx) {sm = (StorageManager) ctx.getSystemService(Context.STORAGE_SERVICE);}/*** @brief get list of paths of all storage** @return return storage paths stored in a string array. eg: "mnt/udisk1",*         "mnt/ext_sdcard1" ...**/public String[] getStorageAllPaths() {String paths[] = null;try {paths = (String[]) sm.getClass().getMethod("getVolumePaths").invoke(sm);} catch (Exception e) {Log.e(LOG_TAG, "Call getMethod of getVolumePaths Error");e.printStackTrace();}return paths;}/*** @brief get paths of all SD storage** @return return sd storage paths stored in a string array. eg :*         "mnt/ext_sdcard1" ...**/public String[] getSdAllPaths() {ArrayList<String> arrayPath = new ArrayList<String>();String paths[] = null;int i, count;try {paths = (String[]) sm.getClass().getMethod("getVolumePaths").invoke(sm);} catch (Exception e) {Log.e(LOG_TAG, "Call getMethod of getVolumePaths Error");e.printStackTrace();}if (null == paths)return null;for (i = 0; i < paths.length; i++) {if (-1 != paths[i].indexOf(SD_PATH_MARK)) {arrayPath.add(paths[i]);}}count = arrayPath.size();

使用方式如下:

package com.asir.album;import android.content.Context;public class FileStorageState {private EnvironmentManager mEM;public FileStorageState(Context context) {mEM = new EnvironmentManager(context);}public boolean getSDState() {return queryMeidaState(AppGlobalData.PATH_SD);}public boolean getUSB1State() {return queryMeidaState(AppGlobalData.PATH_USB1);}public boolean getUSB2State() {return queryMeidaState(AppGlobalData.PATH_USB2);}public boolean getUSB3State() {return queryMeidaState(AppGlobalData.PATH_USB3);}public boolean getUSB4State() {return queryMeidaState(AppGlobalData.PATH_USB4);}public boolean getUSB5State() {return queryMeidaState(AppGlobalData.PATH_USB5);}public boolean queryMeidaState(String path) {if (mEM != null) {if (mEM.getStorageState(path).equals("mounted")) {return true;}}return false;}}

SDcard相关操作,代码如下:

// 判断SD卡是否存在public static boolean isExistSDCard() {if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {return true;}return false;}// 判断文件是否存在public static boolean isUpgradeFileExist(String zipFilePath) {boolean result = false;if (isExistSDCard()) {//"/mnt/sdcard/hcn_mcu_update.zip"File file = new File(zipFilePath);if (file != null) {if (file.exists()) {result = true;}}}return result;}//删除文件private static void delete(File file) {if (file.isFile()) {file.delete();Log.e("file", "delete" + file.getAbsolutePath());return;}if (file.isDirectory()) {File[] childFiles = file.listFiles();if (childFiles == null || childFiles.length == 0) {file.delete();return;}for (int i = 0; i < childFiles.length; i++) {delete(childFiles[i]);}file.delete();}}/*** SD卡剩余空间*/public static long getSDFreeSize() {// 取得SD卡文件路径File path = Environment.getExternalStorageDirectory();StatFs sf = new StatFs(path.getPath());// 获取单个数据块的大小(Byte)long blockSize = sf.getBlockSize();// 空闲的数据块的数量long freeBlocks = sf.getAvailableBlocks();// 返回SD卡空闲大小// return freeBlocks * blockSize; //单位Byte// return (freeBlocks * blockSize)/1024; //单位KBreturn (freeBlocks * blockSize) / 1024 / 1024; // 单位MB}/*** SD卡总容量*/public static long getSDAllSize() {// 取得SD卡文件路径File path = Environment.getExternalStorageDirectory();StatFs sf = new StatFs(path.getPath());// 获取单个数据块的大小(Byte)long blockSize = sf.getBlockSize();// 获取所有数据块数long allBlocks = sf.getBlockCount();// 返回SD卡大小// return allBlocks * blockSize; //单位Byte// return (allBlocks * blockSize)/1024; //单位KBreturn (allBlocks * blockSize) / 1024 / 1024; // 单位MB}/** 获取指定文件大小*/public static long getFileSize(File file) throws Exception {long size = 0;if (file.exists()) {FileInputStream fis = null;fis = new FileInputStream(file);size = fis.available();} else {file.createNewFile();Log.e("获取文件大小", "文件不存在!");}return size / 1024 / 1024;}

这篇关于Android如何检测外置卡的状态及内置SDcard状态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122341

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class