Android检测手机中存储卡及剩余空间大小的方法(基于Environment,StatFs及DecimalFormat)

本文实例讲述了Android检测手机中存储卡及剩余空间大小的方法。分享给大家供大家参考,具体如下:

Android中Environment可用来检测手机中是否安装有存储卡以及文件存储路径等。StatFs可以获取存储卡的空间大小以及剩余空间大小。DecimalFormat可以实现把数字划分为一定的格式。

具体程序如下:

import java.io.File;
import java.text.DecimalFormat;
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;
public class A08Activity extends Activity {
 private TextView tv;//用来显示存储卡的情况
 private Button b;//触发检测存储卡事件
 private ProgressBar pb;//用ProgressBar来显示存储卡的状况
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv=(TextView)findViewById(R.id.tv);
    b=(Button)findViewById(R.id.button);
    pb=(ProgressBar)findViewById(R.id.pb);
    b.setOnClickListener(new OnClickListener(){
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  showSize();//用来检测存储卡的存储情况
  }
  });
  }
 protected void showSize() {
 // TODO Auto-generated method stub
 tv.setText("");
 pb.setProgress(0);
 //用来检测存储卡是否存在
 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
  //如果存储卡存在,则获取存储文件的路径
  File path=Environment.getExternalStorageDirectory();
  StatFs sf=new StatFs(path.getPath());//创建StatFs对象
  long blockSize=sf.getBlockSize();//获得blockSize
  long totalBlock=sf.getBlockCount();//获得全部block
  long availableBlock=sf.getAvailableBlocks();//获取可用的block
  //用String数组来存放Block信息
  String[] total=fileSize(totalBlock*blockSize);
  String[] available=fileSize(availableBlock*blockSize);
  //在ProgressBar中显示可用空间的大小
  int a=Integer.parseInt(available[0]);
  pb.setProgress(a);
  String s="SD卡中空间总共有:"+total[0]+total[1]+"\n";
  s+="剩余空间大小:"+available[0]+available[1];
  tv.setText(s);
 }
 else if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){
  tv.setText("SD卡已移除");
 }
 }
 //用来定义存储空间显示格式
 public String[] fileSize(long size){
 String s="";
 if(size>1024){
  s="KB";
  size/=1024;
  if(size>1024){
  s="MB";
  size/=1024;
  }
 }
 DecimalFormat df=new DecimalFormat();
 df.setGroupingSize(3);
 String[] result=new String[3];
 result[0]=df.format(size);
 result[1]=s;
 return result;
 }
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》及《Android开发入门与进阶教程》

希望本文所述对大家Android程序设计有所帮助。

时间: 2016-01-27

Android获得内/外置存储卡路径的方法

我们知道Android上一般都有外置的存储卡, 但是通过Environment.getExternalStorageDirectory()获取的是内置的存储卡位置 (也有的手机可以在系统中修改默认存储) 那么如何获取外置存储卡的位置呢? 我们可以通过StorageManager来获取多个外置sdcard,代码如下: StorageManager storageManager = (StorageManager) cxt.getSystemService(Context.STORAGE_SERVI

如何获取Android设备挂载的所有存储器

android系统提供了Environment.getExternalStorageDirectory()接口获得存储器的路径,但是这个接口往往给的结果并不是我们想要的,在某些设备上它返回的是手机内部存储,某些设备它返回的手机外部存储.还有就是某些Android设备支持扩展多个sdcard,这个时候想要获得所有存储器的挂载路径,这个接口是没有办法办到的. 怎么获取Android设备所有存储器的位置呢?或者说获得所有的挂载点 系统提供了一个StorageManager,它有一个方法叫getVolu

Android获取内外置存储卡的方法

以前的Android(4.1之前的版本)中,SDcard跟路径通过"/sdcard"或者"/mnt/sdcard"来表示存储卡,而在Jelly Bean系统中修改为了"/storage/sdcard0",以后可能还会有多个SDcard的情况. 目前为了保持和之前代码的兼容,sdcard路径做了link映射. 为了使您的代码更加健壮并且能够兼容以后的Android版本和新的设备,请通过Environment.getExternalStorageDi

Android获取内置sdcard跟外置sdcard路径

Android获取内置sdcard跟外置sdcard路径 Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文件夹,根据判断得到内置sdcard跟外置sdcard. 4.程序运行的时候记得给程序添加读取sdcard的权限哦. /** * 得到sdcard的路径 * @return 返回一个字符串数组 下标0:内置sdcard 下标1:外置sdcard

Android 获取系统各个目录的方法

在Android开发过程中,我们经常会对文件系统进行操作--存放.释放我们应用的数据.Android系统中提供了各种功能的文件目录,每个目录都有相应的特点和功能. 这篇文章主要介绍和记录一下实际开发过程中常用的各个文件目录. (1)内部存储(Internal Storage) 内部存储是App的私有目录,当一个应用卸载之后,内部存储中的这些文件也被删除.Shared Preferences和SQLite数据库文件都是存储在内部存储空间上的. -context.getFileDir() 路径:(d

js获取内联样式的方法

本文实例讲述了js获取内联样式的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,target-densitydpi=high-dpi,in

Android获取窗体信息的Util方法

Android获取窗体信息的Util方法,方法很简单,这里就不多废话了,直接上代码 package com.wangyi.tools; import android.app.Activity; import android.util.DisplayMetrics; public class DisplayUtils { private static DisplayUtils instance; private Activity mActivity; private DisplayUtils(Ac

Android 获取IP地址的实现方法

Android 获取IP地址 最近做项目,有一个需求是Android设备获取当前IP的功能,经过一番查询资料解决了,记录下实现方法. 1.使用WIFI 首先设置用户权限 <uses-permission Android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.CH

Android获取系统时间的多种方法

Android中获取系统时间有多种方法,可分为Java中Calendar类获取,java.util.date类实现,还有android中Time实现. 现总结如下: 方法一: void getTime1(){ long time=System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis(); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd

android获取手指触摸位置的方法

本文实例为大家分享了android获取手指触摸位置的具体代码,供大家参考,具体内容如下 手机屏幕事件的处理方法onTouchEvent.该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件. 其原型是: public boolean onTouchEvent(MotionEvent event) 参数event:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置.触摸的类型以及触摸的时间等.该对象会

Android获取网络图片并显示的方法

本文实例为大家分享了Android获取网络图片并显示的具体代码,供大家参考,具体内容如下 使用 HttpURLConnection 获得连接,再使用 InputStream 获得图片的数据流,通过 BitmapFactory 将数据流转换为 Bitmap,再将 Bitmap 通过线程的 Message 发送出去,Handler 接收到消息就会通知 ImageView 显示出来. 记得要在manifest文件中添加 < uses-permission android:name="androi