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

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.