分析setting源代码获取sd卡大小

分析setting源代码获取sd卡大小

android系统有一个特点,即开源,我们可以得到任何一个应用的源代码,比如我们不知道这样的android代码怎么写,我们可以打开模拟器里面的设置(setting),里面有一个存储,我们可以下载setting的源代码,通过快捷方式(ctrl+h)一步步查找怎么写代码

1.1步骤:

比如下载android2.3的源代码(注意这里的源代码不是指sources里面的代码,source里面的代码是sdk的全部代码,这里的代码是指全部android的代码,包含sdk,模拟器,等等,这里的代码很大,2.3差不多800M,4.0差不多10G)-----打开下载的文件----打开frameworks----base----packages---apps----settings-----把setting目录解压到桌面------import这个目录到eclipse

 

由于有些api没有导入,项目中会有红叉,可以不理会这些红叉----可以根据项目名,按快捷键ctrl+h----搜索设置里面的项目名,找到相应的代码。最终可以定位到src目录下找到某个功能的实现源代码

 1 package com.example.readsdcard;
 2 import java.io.File;
 3  4 public class MainActivity extends Activity {
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         TextView tv = (TextView)findViewById(R.id.tv);
10         
11         File path = Environment.getExternalStorageDirectory();
12         StatFs stat = new StatFs(path.getPath());
13         long blockSize = stat.getBlockSize();
14         long totalBlocks = stat.getBlockCount();
15         long availableBlocks = stat.getAvailableBlocksLong();        
16         long totalSize = blockSize * totalBlocks;
17         long availSize = availableBlocks * blockSize;
18         
19         //将long类型转化为字符串类型
20         String totalStr = Formatter.formatFileSize(this, totalSize);
21         String availStr = Formatter.formatFileSize(this, availSize);
22     
23         //设置到界面上
24         tv.setText("总内存:" + totalStr + "
" +"可用内存:" + availStr + "
" + getRomSpaceInfo());
25     }
26     
27         public String getRomSpaceInfo()
28         {
29             File path = Environment.getDataDirectory();
30             StatFs stat = new StatFs(path.getPath());
31             long blockSize = stat.getBlockSize();
32             long totalBlocks = stat.getBlockCount();
33             long availableBlocks = stat.getAvailableBlocksLong();
34             
35             long totalSize = blockSize * totalBlocks;
36             long availSize = availableBlocks * blockSize;
37             
38             String totalStr = Formatter.formatFileSize(this, totalSize);
39             String availStr = Formatter.formatFileSize(this, availSize);
40             return "手机内存:总空间" + totalStr +"
手机内存:可用空间" + availStr;
41         }
42 }

 

 
原文地址:https://www.cnblogs.com/baoxiaofei/p/4237549.html