热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

外置卡状态检测操作,实际上是反射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 arrayPath = new ArrayList();
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 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 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; //单位KB
return (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; //单位KB
return (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;
}

推荐阅读
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
捕鱼达人2602914975
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有