其它综合

判断SD是否存在及其容量查询

我爱IT资讯库   2021/02/24

这个非常简单,直接上代码:

MainActivity:

package com.home.getsdinfo;

import java.io.File;

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.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	private Button getAllBtn;
	private Button getRemainBtn;
	private TextView allText;
	private TextView remainText;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initWidget();
	}

	private void initWidget() {
		getAllBtn = (Button) findViewById(R.id.main_btn_all);
		getAllBtn.setOnClickListener(this);
		getRemainBtn = (Button) findViewById(R.id.main_btn_remain);
		getRemainBtn.setOnClickListener(this);
		allText = (TextView) findViewById(R.id.main_tv_all);
		remainText = (TextView) findViewById(R.id.main_tv_remain);
	}

	@Override
	public void onClick(View v) {
		if (v == getAllBtn) {
			if (!isExistSDCard()) {
				Toast.makeText(this, "SD卡不存在!", Toast.LENGTH_SHORT).show();
				return;
			}
			allText.setText(getSDAllSize() + "MB");
		} else if (v == getRemainBtn) {
			if (!isExistSDCard()) {
				Toast.makeText(this, "SD卡不存在!", Toast.LENGTH_SHORT).show();
				return;
			}
			remainText.setText(getSDRemainSize() + "MB");
		}
	}

	/**
	 * 判断SD卡是否存在
	 * 
	 * @return
	 */
	private boolean isExistSDCard() {
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			return true;
		}
		return false;
	}

	/**
	 * 获取SD卡剩余空间
	 * 
	 * @return
	 */
	private long getSDRemainSize() {
		// 获取SD卡根目录文件
		File file = Environment.getExternalStorageDirectory();
		// 构建StatFs对象
		StatFs sfs = new StatFs(file.getPath());
		// 获取单个数据块的大小(Byte)
		long blockSize = sfs.getBlockSize();
		// 获取空闲的数据块的数量
		long freeBlocks = sfs.getAvailableBlocks();
		// 返回SD卡空闲大小
		return (freeBlocks * blockSize) / 1024 / 1024; // 单位MB
	}

	/**
	 * 获取SD卡总容量
	 * 
	 * @return
	 */
	private long getSDAllSize() {
		// 获取SD卡根目录文件
		File file = Environment.getExternalStorageDirectory();
		// 构建StatFs对象
		StatFs sfs = new StatFs(file.getPath());
		// 获取单个数据块的大小(Byte)
		long blockSize = sfs.getBlockSize();
		// 获取所有数据块数
		long allBlocks = sfs.getBlockCount();
		// 返回SD卡大小
		return (allBlocks * blockSize) / 1024 / 1024; // 单位MB
	}
}

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/main_btn_all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取SD卡总容量" />

        <TextView
            android:id="@+id/main_tv_all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/main_btn_remain"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取SD卡剩余空间" />

        <TextView
            android:id="@+id/main_tv_remain"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp" />
    </LinearLayout>

</LinearLayout>

权限:

 <!-- 在SDCard中创建与删除文件权限 -->
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
 <!-- 往SDCard写入数据权限 -->
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />




 




热门内容

Python:如何排序(sort)

一、前言 python的列表(list)有两个排序方法: 一种是内建的list.sort()方法,可以直接改变列表的内容 ...

boost库在工作(5)作用域智能指针scoped_ptr之四

第二种情况,主要就是使用在调用异常抛出的函数的地方。如下面的例子: //异常抛出的函数,适合使用智能指针... ...

Error:couldnotopen`C:\ProgramFiles\Java\jre6\lib\i386\jvm.cfg'

昨天刚过情人节!哈哈,好久没记录学习内容了,今天在房子闲着没事重新安装jdk,按道理很简单的; 第一步下载jdk; ...

第49周二

晚上总结下今天,主要是在完善用户需求文档,同时看了jquery相关的操作技巧,主要是想学习jquery源码,在知乎jqu ...

C++ #include 和 using std::string

今天,偶尔写了一个小小的程序,关于字符串问题程序。 比如,我想连续打印用户输入的字符串。 #include&l... ...

Struts Hibernate Spring 经典面试题

Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建Ses... ...

SAP Performance浅析

本文来源于:http://scnblogs.techweb.com.cn/tcsapbw/archives/106... ...

数据库MySQL与xls文件的互导

      最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到... ...

Head-of-Line Blocking (线头阻塞)

Head of Line (HOL) Blocking 产生的原因: 概念:队列的首个packet由于它的目的... ...

Python set的高效利用

python set的应用   ... ...

CollectionFrameWork

collectionframework如下: collection ├list │├linkedlist │├array ...

JAVA访问修饰符构造函数的问题(转)

java访问修饰符 构造函数的问题 java访问修饰符-限定符总结(类比c#) java访问修饰符--------- ...

PAT甲1004CountingLeaves【dfs】

1004counting leaves(30 分) a family hierarchy is usually p ...

171.[LeetCode]Excel Sheet Column Number

题目: Related to question Excel Sheet Column Title ... ...

在.NET中获取一台电脑名,IP地址及当前用户名

在.NET中获取一台电脑名,IP地址及当前用户名是非常简单,以下是我常用的几种方法,如果大家还有其他好的方法,可以回复一... ...
sun directory server

sun directory server

Sun One Directory Server(LDAP)安装和调整指南   ... ...
黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

路由器被蹭网后,我有被黑的风险吗? Evi1m0,来自知道创宇,邪红色信息安全组织创始人 其实这个问题可以... ...

oracle 10g for redhat5

解压文件 解压文件命令: unzip 10201_database_linux32.zip ... ...

什么是I2C协议?

I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。 一. I2C协议技术性能:&nb... ...

[USACO15DEC]最大流MaxFlow

题目:洛谷p3128。 题目大意:一棵n个点的树,每次将两个节点最短路径所覆盖的所有节点的流量加1。问你最后流量最大的节 ...

kde4.1 alpha1

KDE Project Ships First Alpha of KDE 4.1 KDE Commun... ...

oracle 函数 和 优化

sql语句中,如果where条件里面含有not, !=, <> ,null ,则即使该字段建有索引,也... ...
09年中国互联网企业市值排名

09年中国互联网企业市值排名

这是一个最坏的时代,也是一个最好的时代。自07年底美国次贷危机以来,全球经济发生了巨大的变化。股票市场也随之跌荡起... ...

用于发送UDP消息的SQL Server 扩展存储过程

下载源文件 13.1 kb介绍我希望能够发布 sql server 表更新,因此修改了微软的示例扩展存储过程 xp_he ...

Cache与Fetch(二)

这两天一直百思不得其解的问题终于解决了,这个问题如下: 通过HQL:“select distinct forumGr... ...

[转]小规模低性能低流量网站设计原则

作者: Fenng 网址: http://www.dbanotes.net/arch/small_site... ...

divcss圆角

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit... ...

Kindle Paperwhite 越狱/加字体/支持PDF、EPUB、DjVu、FB2、CHM和DOC文档

0. 升级 官网固件升级:http://www.amazon.com/gp/help/customer/displ... ...
购物网第二阶段总结笔记3:用户注册模块

购物网第二阶段总结笔记3:用户注册模块

事先工作: 【1】建立用户表:  分析静态页面的用户信息,可以得出用户表所需的字段,建立用户表S... ...

pythonbottleweb框架简介

bottle 是一个快速,简单,轻量级的 python wsgi web 框架。单一文件,只依赖 python 标准库 ...