[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 ...
随机推荐
- Exp1 PC平台逆向破解----20164325 王晓蕊
前言:实验中用到的知识 JE:条件转移指令,如果相等则跳转: JNE:条件转移指令(等同于“Jump Not Equal”),如果不相等则跳转: JMP:无条件跳转指令.无条件跳转指令可转到内存中任何 ...
- jquery.ocupload上传文件到指定目录
首先引入两个js <script type="text/javascript" src="${pageContext.request.contextPath }/r ...
- Redhat/CentOS7-环境虚拟机简单搭建Nginx+Tomcat负载均衡集群
Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选.由于Tomcat处理静态HTML的能力运不及Apache或者Nginx,所以Tomcat ...
- 背水一战 Windows 10 (114) - 后台任务: 后台任务的 Demo(与 app 不同进程), 后台任务的 Demo(与 app 相同进程)
[源码下载] 背水一战 Windows 10 (114) - 后台任务: 后台任务的 Demo(与 app 不同进程), 后台任务的 Demo(与 app 相同进程) 作者:webabcd 介绍背水一 ...
- CSS3中的一些属性
1. 可匹配部分字符串 2. box-sizing属性 3. CSS3多栏布局 1.可匹配部分字符串 /*^运算符,匹配字符串首部*/ a[href^='http://website'] /*$运算符 ...
- nodejs常用代码片段
自动创建目录(多级) 相比起使用递归创建,调用 sheljsl 模块简单得多 const shell = require('shelljs') const fs = require('fs') if ...
- Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型
JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...
- Java对象的克隆和深浅问题
Java实现克隆的方式 Java实现克隆的方式有如下两种, 推荐采用实现Cloneable接口的方式 实现Cloneable接口, 重写clone方法, 调用父类的clone方法 还有另一种方法, 不 ...
- vim常用命令行备忘总结
一 窗口切换 1 :sp 水平切换当前窗口 2 :vsp 垂直切换当前窗口 3 :clo 关闭活动窗口 4 : on 只保留活动窗口 5 : ctrl + w 在窗口间循环切换 ctrl + ...
- VMware Workstation Pro网络配置(WiFi配置等)
常用技巧 连续按两下ctrl+alt,实现鼠标脱离 VMware Workstation Pro网络配置有几种模式: 桥接模式: 网络上的独立主机 占用路由器新IP资源 通过VMware Networ ...