分析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 }