首页 > 系统相关 >Android 小项目之--解析如何获取SDCard 内存

Android 小项目之--解析如何获取SDCard 内存

时间:2022-10-06 12:11:21浏览次数:51  
标签:返回 -- MEDIA SDCard getExternalStorageState import Android android


  • 1、讲述 Environment 类。
  • 2、讲述 StatFs 类。
  • 3、完整例子读取 SDCard 内存

1、讲述 Environment 类

Environment 是一个提供访问环境变量的类

Environment 包含常量:

  • ​MEDIA_BAD_REMOVAL​​ 解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除
  • ​MEDIA_CHECKING​​ 解释:返回getExternalStorageState() ,表明对象正在磁盘检查。
  • ​MEDIA_MOUNTED​​ 解释:返回getExternalStorageState() ,表明对象是否存在并具有读/写权限
  • ​MEDIA_MOUNTED_READ_ONLY​​ 解释:返回getExternalStorageState() ,表明对象权限为只读
  • ​MEDIA_NOFS​​ 解释:返回getExternalStorageState() ,表明对象为空白或正在使用不受支持的文件系统。
  • ​MEDIA_REMOVED​​ 解释:返回getExternalStorageState() ,如果不存在 SDCard 返回
  • ​MEDIA_SHARED​​ 解释:返回getExternalStorageState() ,如果 SDCard 未安装 ,并通过 USB 大容量存储共享 返回
  • ​MEDIA_UNMOUNTABLE​​ 解释:返回getExternalStorageState() ,返回 SDCard 不可被安装 如果 SDCard 是存在但不可以被安装
  • ​MEDIA_UNMOUNTED​​ 解释:返回getExternalStorageState() ,返回 SDCard 已卸掉如果 SDCard  是存在但是没有被安装

Environment 常用方法:

 2、讲述 StatFs 类

StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
StatFs 常用方法:

3、完整例子读取 SDCard 内存

存储卡在 Android 手机上是可以随时插拔的,每次的动作都对引起操作系统进行 ACTION_BROADCAST,本例子将使用上面学到的方法,计算出 SDCard 的剩余容量和总容量。代码如下:

 

package com.terry;

import java.io.File;
import java.text.DecimalFormat;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class getStorageActivity extends Activity {
private Button myButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
viewHolder.myButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
getSize();
}
});
}


void findView(){
viewHolder.myButton=(Button)findViewById(R.id.Button01);
viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar);
viewHolder.myTextView=(TextView)findViewById(R.id.myTextView);
}



void getSize(){
viewHolder.myTextView.setText("");
viewHolder.myBar.setProgress(0);
//判断是否有插入存储卡
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File path =Environment.getExternalStorageDirectory();
//取得sdcard文件路径
StatFs statfs=new StatFs(path.getPath());
//获取block的SIZE
long blocSize=statfs.getBlockSize();
//获取BLOCK数量
long totalBlocks=statfs.getBlockCount();
//己使用的Block的数量
long availaBlock=statfs.getAvailableBlocks();

String[] total=filesize(totalBlocks*blocSize);
String[] availale=filesize(availaBlock*blocSize);
//设置进度条的最大值
int maxValue=Integer.parseInt(availale[0])
*viewHolder.myBar.getMax()/Integer.parseInt(total[0]);
viewHolder.myBar.setProgress(maxValue);
String Text="总共:"+total[0]+total[1]+"\n"
+"可用:"+availale[0]+availale[1];
viewHolder.myTextView.setText(Text);

}else if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){
Toast.makeText(getStorageActivity.this, "没有sdCard", 1000).show();
}
}

//返回数组,下标1代表大小,下标2代表单位 KB/MB
String[] filesize(long size){
String str="";
if(size>=1024){
str="KB";
size/=1024;
if(size>=1024){
str="MB";
size/=1024;
}
}
DecimalFormat formatter=new DecimalFormat();
formatter.setGroupingSize(3);
String result[] =new String[2];
result[0]=formatter.format(size);
result[1]=str;
return result;
}
}


标签:返回,--,MEDIA,SDCard,getExternalStorageState,import,Android,android
From: https://blog.51cto.com/jdsjlzx/5733463

相关文章

  • android之定时器AlarmManager .
     果图:      当我们点击定时时,会弹出一个时间选择器,选定好时间之后,系统便可以进行定时了。注意,这里可不是会真的响铃,我们在定时的任务里并没有......
  • ImageView 用法总结
    结构继承关系publicclassView.OnClickListnerextendsView java.lang.Objectandroid.view.Viewandroid.widget.ImageView 直接子类ImageButton,QuickContactBadge ......
  • preferenceActivity和preferencescreen用法
    1.<?xmlversion="1.0"encoding="utf-8"?>2.<PreferenceScreen3.xmlns:android="http://schemas.android.com/apk/res/android">4.<CheckBoxPreference5.android:key=......
  • Android中的JSON详细总结
    1、JSON(JavaScriptObjectNotation)定义:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得......
  • Android开发之PreferenceActivity .
    今天我们来讲PreferenceActivity的使用。我们先来认识一下它,看看它长什么样?呵呵,截图如下:看到没?这就是PreferenceActivity.看起来蛮眼熟的,在哪见过。呵呵,对,在我们得模拟器“......
  • Android软件开发之盘点自定义View界面大合集
    今天我用自己写的一个Demo和大家详细介绍一个Android中自定义View中的使用与绘制技巧。1.自定义view绘制字符串            相信在实际开发过程中必然很多......
  • db2 多温度存储器
    一、概述DB2V10中新增加的特性将访问频率不同的数据放置在不同的存储空间中引入了存储组(storagegroup)的概念方便DBA对不同热度的数据进行管理二、存储器组存储数据的存储......
  • db2 bufferpool操作
    一、概述数据库BufferPool介绍:对于数据库管这种对性能要求极高的系统而言,缓存自然也是不可少的。数据库中的缓存称为缓冲池,缓冲池存在的唯一目的就是提高数据库系统性能。缓......
  • Android 设置主题实现点击波纹效果
    开头先说说大家都知道的MaterialDesign。这里推荐​​大苞米​​的系列博客,介绍的很全面。MaterialDesign:MaterialDesign是Google推出的一个全新的设计语言,它的特点就是......
  • 玩转华为ENSP模拟器系列 | 两个网关之间通过IKE方式协商IPSec VPN隧道(采用预共享密钥
    素材来源:华为防火墙配置指南一边学习一边整理试验笔记,并与大家分享,侵权即删,谢谢支持!附上汇总贴:​​玩转华为ENSP模拟器系列|合集_COCOgsta的博客-CSDN博客_华为模拟器实验......