读取手机内存和SD卡的空间大小

Android内存及SD卡容量显示
本文介绍了一个简单的Android应用,用于展示设备的可用内存大小和SD卡剩余空间。通过使用StatFs类获取存储信息,并利用Formatter进行友好的格式化显示。
部署运行你感兴趣的模型镜像

activity_main.xml  布局很简单

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tv_mem_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="176dp"
        android:text="@string/hello_world" />

</RelativeLayout>

MainActivity.java


package com.demo.meninfo;

import java.io.File;

import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.app.Activity;
import android.text.format.Formatter;
import android.widget.TextView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		TextView tv_info = (TextView) findViewById(R.id.tv_mem_info);
		String text = "内存可用:" + getAvailMemSize() + "\nSD卡可用:" + getAvailSDSize();
		tv_info.setText(text);
	}

	public String getAvailMemSize() {
		File path = Environment.getDataDirectory();
		StatFs stat = new StatFs(path.getPath());
		long blockSize = stat.getBlockSize();
		long availableBlocks = stat.getAvailableBlocks();
		return Formatter.formatFileSize(this, blockSize * availableBlocks);
	}
	
	public String getAvailSDSize(){
		File path = Environment.getExternalStorageDirectory();
		StatFs stat = new StatFs(path.getPath());
		long blockSize = stat.getBlockSize();
		long availableBlocks = stat.getAvailableBlocks();
		return Formatter.formatFileSize(this, blockSize * availableBlocks);
	}
}


查询android代码中可得出使用的api,本次api接口都是从android2.3系统中找到的......

您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

### 单片机读取SD内存大小的方法 单片机可以通过解析SD的CSD(Card-Specific Data)寄存器来获取其内存大小。CSD寄存器包含了关于SD容量、数据块大小以及其他特性的详细信息。在实际操作中,单片机需要通过SPI或SDIO接口与SD通信,并按照特定协议读取CSD寄存器的内容[^4]。 以下是实现该功能的具体方法: 1. **初始化SD**:首先,单片机需要通过SPI或SDIO接口对SD进行初始化。初始化完成后,SD的状态会被设置为准备就绪状态,此时可以发送命令以读取CSD寄存器内容[^4]。 2. **发送CMD9命令**:通过SPI接口发送CMD9命令(SEND_CSD),要求SD返回其CSD寄存器的内容。在发送CMD9之前,确保CS引脚被拉低以选中SD[^4]。 3. **接收CSD寄存器数据**:发送CMD9后,单片机需要连续发送0xFF字节,直到接收到起始标记字节0xFE。随后,SD将返回16个字节的CSD寄存器数据。这些数据包含了SD的容量信息[^4]。 4. **解析CSD寄存器数据**:根据CSD寄存器的格式,解析出SD的逻辑块数量(Logical Block Number, LogBlockNbr)逻辑块大小(Logical Block Size, LogBlockSize)。对于V1.0V2.0版本的SD,CSD寄存器的解析方式略有不同。例如,在STM32系列单片机中,HAL库已经提供了相关结构体`HAL_SD_CardInfoTypeDef`,其中包含`LogBlockNbr``LogBlockSize`字段,可以直接用于计算SD容量[^2]。 5. **计算容量**:通过以下公式计算SD的总容量: ```c uint32_t cardCapacity = hsd.SdCard.LogBlockNbr * hsd.SdCard.LogBlockSize; ``` 其中,`hsd.SdCard.LogBlockNbr`表示逻辑块的数量,`hsd.SdCard.LogBlockSize`表示每个逻辑块的大小(通常为512字节)[^2]。 ### 示例代码 以下是一个基于STM32 HAL库的示例代码,用于读取并计算SD的容量: ```c #include "stm32f4xx_hal.h" void CalculateSDCardCapacity(SD_HandleTypeDef *hsd) { if (hsd->SdCard.CardType == SD_STD_CAPACITY) { // V1.0 SD uint32_t cardCapacity = hsd->SdCard.BlockNbr * hsd->SdCard.BlockSize; printf("SD Card Capacity: %lu bytes\n", cardCapacity); } else if (hsd->SdCard.CardType == SD_HIGH_CAPACITY) { // V2.0 SD uint32_t cardCapacity = hsd->SdCard.LogBlockNbr * hsd->SdCard.LogBlockSize; printf("SD Card Capacity: %lu bytes\n", cardCapacity); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值