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

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后