<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<!-- 显示block的数量的标签控件 -->
<TextView
android:id="@+id/tv_TotalBlocks"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 显示block的大小的标签控件 -->
<TextView
android:id="@+id/tv_BlocSize"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 显示可用block的标签控件 -->
<TextView
android:id="@+id/tv_AvailaBlock"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 显示空block的标签控件 -->
<TextView
android:id="@+id/tv_FreeBlock"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 显示SDCard的总大小的标签控件 -->
<TextView
android:id="@+id/tv_SDTotalSize"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 显示SDCard的剩余大小的标签控件 -->
<TextView
android:id="@+id/tv_SDFreeSize"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>
package com.example.yanlei.yl2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView; import java.io.File; public class MainActivity extends AppCompatActivity {
private TextView mTvTotalBlocks; //SDCard上BLOCK总数
private TextView mTvBlocSize; //SDCard上每个block的SIZE
private TextView mTvAvailaBlock; //可供程序使用的Block的数量
private TextView mTvFreeBlock; //剩下的所有Block的数量(包括预留的一般程序无法使用的块)
private TextView mTvSDTotalSize; //SDCard 总容量大小MB
private TextView mTvSDFreeSize; //SDCard 剩余大小MB @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 得到布局中的控件
findView();
// 绑定控件事件
SDCardSizeTest();
} private void findView() {
// 绑定控件
mTvTotalBlocks = (TextView)findViewById(R.id.tv_TotalBlocks);
mTvBlocSize = (TextView)findViewById(R.id.tv_BlocSize);
mTvAvailaBlock = (TextView)findViewById(R.id.tv_AvailaBlock);
mTvFreeBlock = (TextView)findViewById(R.id.tv_FreeBlock);
mTvSDTotalSize = (TextView)findViewById(R.id.tv_SDTotalSize);
mTvSDFreeSize = (TextView)findViewById(R.id.tv_SDFreeSize);
} public void SDCardSizeTest() {
// 取得SDCard当前的状态
String sDcString = android.os.Environment.getExternalStorageState(); //如果当前系统有sdcard存在
if (sDcString.equals(android.os.Environment.MEDIA_MOUNTED)) {
// 取得sdcard文件路径
File pathFile = android.os.Environment
.getExternalStorageDirectory();
//得到sdcard的状态
android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath()); // 获取SDCard上BLOCK总数
long nTotalBlocks = statfs.getBlockCount();
mTvTotalBlocks.setText("SDCard上BLOCK总数: "+nTotalBlocks); // 获取SDCard上每个block的SIZE
long nBlocSize = statfs.getBlockSize();
mTvBlocSize.setText("SDCard上每个bloc的SIZE:"+nBlocSize); // 获取可供程序使用的Block的数量
long nAvailaBlock = statfs.getAvailableBlocks();
mTvAvailaBlock.setText("可供程序使用的Block的数量 : " + nAvailaBlock); // 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块)
long nFreeBlock = statfs.getFreeBlocks();
mTvFreeBlock.setText("剩下的所有Block的数量: " + nFreeBlock); // 计算SDCard 总容量大小MB
long nSDTotalSize = nTotalBlocks * nBlocSize / 1024 / 1024;
mTvSDTotalSize.setText("SDCard 总容量大小MB: " + nSDTotalSize +"MB"); // 计算 SDCard 剩余大小MB
long nSDFreeSize = nAvailaBlock * nBlocSize / 1024 / 1024;
mTvSDFreeSize.setText(" SDCard 剩余大小MB: " + nSDFreeSize +"MB");
}
}
}
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView; import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity { private TextView myTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); myTextView= (TextView)findViewById(R.id.myTextView);
StringBuilder log = new StringBuilder();
String inPath = getInnerSDCardPath();
String str="内置SD卡路径:" + inPath + "\r\n";
log.append("内置SD卡路径:" + inPath + "\r\n"); List<String> extPaths = getExtSDCardPath();
for (String path : extPaths) {
str=str+"外置SD卡路径:" + path + "\r\n";
log.append("外置SD卡路径:" + path + "\r\n");
}
myTextView.setText(str);
System.out.println(log.toString());
} /**
* 获取内置SD卡路径
* @return
*/
public String getInnerSDCardPath() {
return Environment.getExternalStorageDirectory().getPath();
} /**
* 获取外置SD卡路径
* @return 应该就一条记录或空
*/
public List<String> getExtSDCardPath()
{
List<String> lResult = new ArrayList<String>();
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
if (line.contains("extSdCard"))
{
String [] arr = line.split(" ");
String path = arr[1];
File file = new File(path);
if (file.isDirectory())
{
lResult.add(path);
}
}
}
isr.close();
} catch (Exception e) {
}
return lResult;
}

android 获得SDCard信息的更多相关文章

  1. android操作sdcard中的多媒体文件(二)——音乐列表的更新

    android操作sdcard中的多媒体文件(二)——音乐列表的更新 原文地址 在上一篇随笔中,我介绍了如何在程序中查询sdcard内的多媒体文件,并且显示到播放列表中,但是,如果在sdcard内删除 ...

  2. android操作sdcard中的多媒体文件(一)——音乐列表的制作

    android操作sdcard中的多媒体文件(一)——音乐列表的制作 原文地址 最近做了一个android音乐播放器,个人感觉最难的就是“后台播放”以及有关“播放列表”的部分,但是总算是找到了实现的方 ...

  3. I.MX6 android 获取framebuffer信息

    /******************************************************************************** * I.MX6 android 获取 ...

  4. Android 使用SDcard进行文件的读取

    平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用File进行存储(使用File操作进行存储):由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在SDcard中,今天自己也学习了 ...

  5. Android内存等信息

    1. Linux中proc目录下文件详解 http://wenku.baidu.com/view/2ce89f00a6c30c2259019ef1.html 2. Android系统/proc目录详解 ...

  6. Android中日志信息的打印方式

    Android中日志信息的打印方式主要有以下7种: 1)System.out(i级别) 2)System.err(w级别) 3)Log.v 4)Log.d 5)Log.i 6)Log.w 7)Log. ...

  7. Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息

    Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...

  8. 获取 Android APP 版本信息工具类(转载)

    获取 Android APP 版本信息工具类 获取手机APP版本信息工具类 1.获取版本名称 2.获取版本号 3.获取App的名称 package com.mingyue.nanshuibeidiao ...

  9. android sdcard信息获取

    手机存储都有两种,一种是 手机自带的存储,称为internal storage,另外一种用户额外插入的存储,称为removable storage (也就是外置sdcard的部分). removabl ...

随机推荐

  1. HDU-1241-油藏

    这题一道深搜的简单题目,其实题目的思路就只是向八个方向搜索,然后把整个油田遍历一遍即可. #include <cstdio> #include <cstring> int ma ...

  2. UNIX环境C语言进程通信

    一.信号管理 1.函数signal signal函数是UNIX系统信号机制最简单的接口 #include <signal.h> typedef void (*sighandler_t)(i ...

  3. JavaWeb项目中集成Swagger API文档

    1.增加依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-sw ...

  4. shell中的$(( )) 的用途:主要用在整数的运算$(( a+b*c ))

    $ a=5; b=7; c=2 $ echo $(( a+b*c ))//注意在进行这些运算时必须是双括号 $ echo $(( (a+b)/c )) $ echo $(( (a*b)%c))

  5. joyoi1935 「Poetize3」导弹防御塔

    #include <iostream> #include <cstring> #include <cstdio> #include <queue> #i ...

  6. 【LeetCode】Combination Sum II(组合总和 II)

    这道题是LeetCode里的第40道题. 题目要求: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. can ...

  7. Leetcode 375.猜数字大小II

    猜数字大小II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜了数字 x ...

  8. Codeforces Round #305 (Div. 2) D. Mike and Feet

    D. Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  9. java紧耦合与松耦合关系

    请先看下这个关于松耦合的回答 举个简单的例子啦 有一百人分成10个团队做开发 你写了一个类A,供其他人调用,怎么办? 简单的方法就是把这个类打成jar包,然后给他们 他们就A a = new A(); ...

  10. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...