[android] 分析setting源代码获取SD卡大小
保存文件到sd卡需要判断sd卡的大小,通过查看android系统的自带应用的源代码,得到方法,sdk下面的source是sdk的源代码,包含的是android.Jar下面的所有class的源代码。在android系统源代码中有ndk(java调c),dalvik虚拟机等,里面packages/apps/settings是设置的源代码。
导入一个源代码,import ==> general ==> existing projects into workspace 选择完root目录后会报错(no project to import)
正确导入 import ==> android ==> existing android code into workspace ==>选中root目录 完成
导入系统源码此时的项目里面会报各种错误,原因是一些api找不到,忽略掉就行,Environment.getExternalStorageDirectory()得到根路径File类型的
Environment.getDataDirectory() 获取手机内存
调用File对象的getPath(),得到String路径,实例化StaFs
调用StaFs对象的getBlockCount() 得到空间个数,调用getAvailableBlock()可用个数
调用StaFs对象的getBlockSize() 得到每个空间大小 两个相乘得到总空间大小
调用Formatter.formatFileSize() 格式化大小(android.text.format)
根据系统设置的文字信息搜索代码部分,按ctrl+h 找文件搜索,在setting源码中查找到。windows上面存储文件,首先格式化硬盘,比如存储1个字节的信息,占用空间也是4kb的
activity代码:
package com.tsh.readsdsize; import java.io.File; import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.text.format.Formatter;
import android.util.Log;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView tv;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.tv);
//SD卡根目录
File rootFile=Environment.getExternalStorageDirectory();
StatFs stat=new StatFs(rootFile.getPath());
int size=stat.getBlockSize();
long count=(long) stat.getBlockCount();
long avaNum=stat.getAvailableBlocks();
long sum=size*count;
long avaSum=avaNum*count;
//格式化
String sdSize=Formatter.formatFileSize(this, sum);
String avSdSize=Formatter.formatFileSize(this, avaSum); tv.setText("总空间(SD):"+sdSize+"\n"+"可用空间(SD):"+avSdSize+"\n"+getRomSize());
}
/**
*
* 获取手机内存大小
*/
public String getRomSize(){
File rootFile=Environment.getDataDirectory();
StatFs stat=new StatFs(rootFile.getPath());
int size=stat.getBlockSize();
long count=(long) stat.getBlockCount();
long avaNum=stat.getAvailableBlocks();
long sum=size*count;
long avaSum=avaNum*count;
//格式化
String sdSize=Formatter.formatFileSize(this, sum);
String avSdSize=Formatter.formatFileSize(this, avaSum); return "总空间(手机):"+sdSize+"\n"+"可用空间(手机):"+avSdSize;
} }
[android] 分析setting源代码获取SD卡大小的更多相关文章
- 分析setting源代码获取sd卡大小
分析setting源代码获取sd卡大小 android系统有一个特点,即开源,我们可以得到任何一个应用的源代码,比如我们不知道这样的android代码怎么写,我们可以打开模拟器里面的设置(settin ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- 【译】如何在 Android 5.0 上获取 SD卡 的读写权限
因为最近项目需要,涉及到 SD卡 的读写操作,然而申请 <!-- 读写权限 --> <uses-permission android:name="android.permi ...
- Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?
本文主要介绍如何写数据到sd卡,这里主要到的技术是Environment中的方法. 1. 2.实现代码: /datasave/src/com/amos/datasave/savePasswordSer ...
- Android - 获取SD卡的内存空间大小
获取SD卡的内存空间大小 //获得SD卡空间的信息 File path=Environment.getExternalStorageDirectory(); StatFs statFs=new Sta ...
- Android获取SD卡路径及SDCard内存的方法
这篇文章主要介绍了Android获取SD卡路径及SDCard内存的方法,较为详细的分析了Android针对SD卡操作所涉及的类及其具体函数功能,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了A ...
- android 获取sd卡根目录
dir:/storage/emulated/0 也就是 sdcard目录 ====== android 获取sd卡根目录 public String getSDPath(){ File ...
- Android Environment 判断sd卡是否挂载 获取sd卡目录
在将一个文件存储到sd卡上面的时候,一般需要判断sd是否已经挂载才进行操作. 那么如何判断sd卡已经挂载呢? 我们可以使用Android的Environment类,具体使用如下: if(Environ ...
- Android 获取SD卡路径和推断SD卡是否存在
android获取sd卡路径方法: 不建议直接写死android sd卡的路径. public String getSDPath(){ File sdDir = null; boolean sdCar ...
随机推荐
- 前端 高级 (二十五)vue2.0项目实战一 配置简要说明、代码简要说明、Import/Export、轮播和列表例子
一.启动服务自动打开浏览器运行 二.配置简要说明 1.node_modules 安装好的依赖文件,中间件等,所在位置 2.package.jason 配置当前项目要安装的中间件和依赖文件 { &quo ...
- Android开发技术周报183学习记录
Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...
- Kali学习笔记14:SMB扫描、SMTP扫描
SMB(Server Message Block)协议,服务消息块协议. 最开始是用于微软的一种消息传输协议,因为颇受欢迎,现在已经成为跨平台的一种消息传输协议. 同时也是微软历史上出现安全问题最多的 ...
- python图像处理库PIL的基本概念介绍
PIL中所涉及的基本概念有如下几个:通道(bands).模式(mode).尺寸(size).坐标系统(coordinate system).调色板(palette).信息(info)和滤波器(filt ...
- .Net Core新建解决方案,添加项目引用,使用VSCode调试
并不是我自己琢磨的,是看了别人学习的,因为写的都不完整,所以就整理一下记录后面忘了回看. 反正.Net Core是跨平台的,就不说在什么系统上了.假设我要建一个名为Doggie的解决方案,里面包含了一 ...
- json模块及其API
模块:json 所包含API列表: json.dumps : 将python对象转换成json格式 json.loads : 将json格式字符串转换为python对象 ——————————————— ...
- redis 系列1 linux下安装说明
一. 安装环境 操作系统:centos 7 ,redis版本4.06,客户端windows 7 ,vs2015. 1.1 安装前的条件 yum -y install gcc-c++ 判断是否安装了gc ...
- sql server 索引阐述系列五 索引参数与碎片
-- 创建聚集索引 create table [dbo].[pub_stocktest] add constraint [pk_pub_stocktest] primary key clustered ...
- selenium python 一些操作和定位收集
(—)滚动条操作 python中selenium操作下拉滚动条方法汇总 selenium_webdriver(python)控制浏览器滚动条 selenium+Python(select定位) Sel ...
- git无法提交问题
今天在git提交时遇到一个问题,如下图 根据它的提示手动删除index.lock文件就可以了. 那为什么会有这个index.lock文件呢?我就觉得是莫名其妙出现的,别人的解释是这样的: 在你进行某些 ...