在开发中,我们经常会用到SD卡,那么在对SD卡进行读写的时候,我们经常需要判断SD卡的剩余容量是否足够。因此,这次我们来写写获取SD卡容量的程序。

该注意的地方,我都在程序里面有注明了。看程序基本就懂了哈。

先来看看运行结果截图吧。

布局文件 activity_main.xml

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:paddingBottom="@dimen/activity_vertical_margin"
  7. android:paddingLeft="@dimen/activity_horizontal_margin"
  8. android:paddingRight="@dimen/activity_horizontal_margin"
  9. android:paddingTop="@dimen/activity_vertical_margin"
  10. tools:context="com.example.sdcard.MainActivity" >
  11.  
  12. <TextView
  13. android:id="@+id/tv"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:text="@string/hello_world" />
  17.  
  18. <TextView
  19. android:id="@+id/tv2"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:text="@string/hello_world" />
  23.  
  24. <TextView
  25. android:id="@+id/tv3"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:text="@string/hello_world" />
  29.  
  30. </LinearLayout>

java文件MainActivty.java

  1. package com.example.sdcard;
  2.  
  3. import java.io.File;
  4.  
  5. import android.annotation.SuppressLint;
  6. import android.app.Activity;
  7. import android.os.Build;
  8. import android.os.Bundle;
  9. import android.os.Environment;
  10. import android.os.StatFs;
  11. import android.text.format.Formatter;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14.  
  15. @SuppressLint("ShowToast")
  16. public class MainActivty extends Activity {
  17.  
  18. @SuppressWarnings("deprecation")
  19. @SuppressLint("NewApi")
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. // TODO Auto-generated method stub
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.activity_main);
  25. TextView tv = (TextView) findViewById(R.id.tv);
  26. TextView tv2 = (TextView) findViewById(R.id.tv2);
  27. TextView tv3 = (TextView) findViewById(R.id.tv3);
  28.  
  29. long blockSize;
  30. long totalBlocks;
  31. long avaibleBlocks;
  32. // 判断是否有插入并挂载存储卡
  33. if (Environment.getExternalStorageState().equals(
  34. Environment.MEDIA_MOUNTED)) {
  35. File path = Environment.getExternalStorageDirectory();
  36. StatFs statFs = new StatFs(path.getPath());
  37. /*
  38. * Build.VERSION.SDK_INT:获取当前系统版本的等级
  39. * Build.VERSION_CODES.JELLY_BEAN_MR2表示安卓4.3,也就是18,这里直接写18也可以
  40. * 因为getBlockSizeLong()等三个方法是安卓4.3以后才有的,所以这里需要判断当前系统版本
  41. * 补充一个知识点:所有储存设备都被分成若干块,每一块都有固定大小。
  42. */
  43. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
  44. // 获取块的数量
  45. blockSize = statFs.getBlockSizeLong();
  46. // 获取一共有多少块
  47. totalBlocks = statFs.getBlockCountLong();
  48. // 可以活动的块
  49. avaibleBlocks = statFs.getAvailableBlocksLong();
  50. tv.setText("总空间:" + formatSize(totalBlocks * blockSize));
  51. tv2.setText("可用空间:" + formatSize(avaibleBlocks * blockSize));
  52. tv3.setText("已用空间:"
  53. + formatSize((totalBlocks * blockSize)
  54. - (avaibleBlocks * blockSize)));
  55.  
  56. } else {
  57. /*
  58. * 黑线说明这三个API已经过时了。但是为了兼容4.3一下的系统,我们需要写上
  59. */
  60. blockSize = statFs.getBlockSize();
  61. totalBlocks = statFs.getBlockCount();
  62. avaibleBlocks = statFs.getAvailableBlocks();
  63. tv.setText(formatSize(avaibleBlocks * blockSize));
  64. }
  65. } else {
  66. Toast.makeText(this, "未找到SD卡", 0);
  67. }
  68. }
  69.  
  70. private String formatSize(long size) {
  71. // 格式化显示的数据。
  72. return Formatter.formatFileSize(MainActivty.this, size);
  73. }
  74.  
  75. }

安卓读取SD卡的容量的更多相关文章

  1. android 读取sd卡中的图片

    一.获取读取SD卡的权限 <!--在SDCard中创建与删除文件权限  -->    <uses-permission android:name="android.perm ...

  2. 查看源代码查找获取sd卡剩余容量的代码

    下载android源码,找到app下的Settings应用源码,导入Settings项目(android项目源码) 查找“可用空间”得到 <string name="memory_av ...

  3. Android--手持PDA读取SD卡中文件

    近两年市场上很多Wince设备都开始转向Android操作系统,最近被迫使用Android开发PDA手持设备.主要功能是扫描登录,拣货,包装,发货几个功能.其中涉及到商品档的时候大概有700左右商品要 ...

  4. android之读取SD卡状态

    package xidian.dy.com.chujia; import android.os.Build; import android.os.Environment; import android ...

  5. android 读取SD卡文件

    SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件.因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作的一件事,那么在Android ...

  6. 【GMT43智能液晶模块】例程十二:SDIO实验——读取SD卡信息

    实验原理: STM32F429上带有SDIO控制器,GMT43液晶模块上将SDIO连接到TF卡座上.本 实验将Micro SD卡插入TF卡座上即可.SD卡中可存放液晶显示模块需要显示的图片.字 库等资 ...

  7. 安卓 往SD卡里写文件不能及时更新的问题

    我们做Android开发时奖保存图片到SD卡,但是Gallery中不能及时显示 下面我找到了问题所在然后解决了这个问题. 当保存图片后打开gallery时,有的会自动给你刷新,有的不行,这样就导致图片 ...

  8. android中读取SD卡上的数据

    通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...

  9. 安卓Java读取SD卡文本文件

    在进行序列识别时,需要对多个模式串进行识别,需要对多行浮点数进行读取,并进行解析. 所以使用的方法为: 使用文本多行读取的方式:对每行文本进行正则表达式匹配:再进行字符转换. 代码如下:        ...

随机推荐

  1. spring: 使用profiles选择数据源(结合嵌入式数据源EmbeddedDatabaseBuilder)

    一般需要在不同的环境(日常环境.性能测试环境.预发环境和生产环境等等)中配置不同的数据源,例如,在开发时非常适合使用嵌入式数据源.在QA环境中比较适合使用DBCP的BasicDataSource.在生 ...

  2. 目标检测 — NMS

    1.非极大值抑制步骤 非极大值抑制算法(Non-maximum suppression,NMS)在目标检测中经常用到.我们的检测算法可能对同一目标产生多次检测的结果,非极大值抑制算法可以保证每个目标只 ...

  3. 重置 Launchpad 和更新APP图标缓存

    重置 Launchpad 方法一:在终端里粘贴 defaults write com.apple.dock ResetLaunchPad -bool true; killall Dock 方法二:在终 ...

  4. ural 1039 树dp

    http://acm.timus.ru/problem.aspx?space=1&num=1039 1039. Anniversary Party Time limit: 0.5 second ...

  5. c#将DataTable内容导出为CSV文件

    写了个类: class DataTableAndCSV { public static DataTable csvToDataTable(string file) { string strConn = ...

  6. RK30SDK开发板驱动分析(一):platform device 的概念与注册

    做过51单片机或者ARM开发的人都知道,单片机内部都有自己的“片内外设”,比如UART,比如I2C,比如SPI等等... 写单片机程序的时候,比如对于UART的驱动,我们都是在程序中直接写一套函数,来 ...

  7. LSM树——LSM 将B+树等结构昂贵的随机IO变的更快,而代价就是读操作要处理大量的索引文件(sstable)而不是一个,另外还是一些IO被合并操作消耗。

    Basic Compaction 为了保持LSM的读操作相对较快,维护并减少sstable文件的个数是很重要的,所以让我们更深入的看一下合并操作.这个过程有一点儿像一般垃圾回收算法. 当一定数量的ss ...

  8. nginx安装目录

    1.rpm -ql nginx看看通过yum安装到哪里了 2./etc/logrotate.d/nginx    配置 nginx日志轮转 用于logrotate服务的日志切割 3./etc/ngin ...

  9. AOP注解式拦截

    1. 自己定义的拦截注解 package com.spring.aop; import java.lang.annotation.Documented; import java.lang.annota ...

  10. C# 高效过滤DataTable 中重复数据方法

    使用DataView,然后设置ToTable,设置几个字段和一个布尔值,表示这些字段作为一个整体,在这个表内不允许重复,示例代码: namespace A { class Program { stat ...