电池信息验证
1、 查看电池信息需要接收一个系统广播,一旦电池信息发生变化,应用程序能够立即显示电池新信息。android系统提供了一个Intent.ACTION_BATTERY_CHANGED广播Action,只要把它注册到广播接收器,即可获取电池信息。
//mBatteryInfoReceiver:用来接收手机电池信息变化时候产生的广播
//Intent.ACTION_BATTERY_CHANGED 电池状态发生变化,他会自动向系统广播Action
//将电池广播数据(Intent)注册到mBatteryInfoReceiver中
registerReceiver( mBatteryInfoReceiver, new IntentFilter( Intent.ACTION_BATTERY_CHANGED ) );
2、mBatteryInfoReceiver为广播接收器,一旦发出Intent.ACTION_BATTERY_CHANGED,系统自动调用BroadcastReceiver方法。在BroadcastReceiver里面可以通过intent获取电池的数据
private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver( ) {
//如果应用程序接收到系统的发送的广播,就会执行调用onReceive函数
@Override
public void onReceive( Context context, Intent intent )
{
……略
//从intent里面得到数据,level表示当前电量的值,0为默认值
int level = intent.getIntExtra( "level", 0 );
//scale表示电量的总刻度,默认值为100
int scale = intent.getIntExtra( "scale", 100 );
//当前电池运行状况,要跟BatteryManager里面的属性进行比较
int health = intent.getIntExtra( "health", BatteryManager.BATTERY_HEALTH_UNKNOWN );
//电池技术(Li电池?还是其他)
String tStr = intent.getStringExtra( "technology" );
//电压
int voltage = intent.getIntExtra( "voltage", 0 )
//温度
int temperature = intent.getIntExtra( "temperature", 0 )
}
}
SD 卡技术验证
1、在模拟器下测试,需要准备:
建立SD卡: mksdcard 100M D:\sdcard.img
将sd卡放入模拟器中: emulator --avd (设备名称) --sdcard D:\sdcard.img
将数据放入sd卡中:adb push E:/music/a.mp3 sdcard
2、SD卡容量
public static ArrayList<String[]> getSdInfo(Context ctx) {
ArrayList<String[]> data = new ArrayList<String[]>();
//linux把设备当作文件处理,从系统中获取SD设备
File path = Environment.getExternalStorageDirectory();
//新建一个stat,它可以查看路径上面的系统文件
StatFs stat = new StatFs(path.getPath());
//一个块的 有多少字节
long blockSize = stat.getBlockSize();
//设备上有多少个空闲的块
long availableBlock = stat.getAvailableBlocks();
//设备上所有的块
long availableBlocks = stat.getBlockCount();
Log.v("blockSize", String.valueOf(blockSize));
Log.v("tag", String.valueOf(availableBlocks));
//换算成字节
long availablePlace = availableBlock * blockSize;
long placeCount = availableBlocks * blockSize;
//换算成GB 或 MB单位
data.add(new String[] {
ctx.getString(R.string.total), formatSize(placeCount, ctx)
});
data.add(new String[] {
ctx.getString(R.string.free), formatSize(availablePlace, ctx)
});
return data;
}
问题:新建100MB的SD卡容量,total显示只有98.43MB,剩下1.57MB哪里去了?被inode 占用( 待考证 ) ???(见SD卡参考资料)
系统文件技术验证(root文件夹)
public static ArrayList<String[]> getSysMemoInfo(Context ctx) {
ArrayList<String[]> data = new ArrayList<String[]>();
//获取root文件夹下面目录(系统文件夹)
File path = Environment.getRootDirectory();
if ( path != null )
{
try
{
StatFs stat = new StatFs( path.getAbsolutePath( ) );
long blockSize = stat.getBlockSize( );
data.add(new String[] {
ctx.getString(R.string.total), formatSize( stat.getBlockCount( )
* blockSize, ctx)
});
data.add(new String[] {
ctx.getString(R.string.free), formatSize( stat.getAvailableBlocks( ) * blockSize, ctx)
});
return data;
}
catch ( Exception e )
{
Log.e( Util.class.getName( ), "Cannot access path: " //$NON-NLS-1$
+ path.getAbsolutePath( ), e );
}
}
return data;
}
参考: http://www.cnblogs.com/crazypebble/archive/2011/04/09/2010196.html
PS:附上SD卡资料(http://arlen.opcom.blog.163.com/blog/static/33775037201112221933170 )
1、无论我们愿意不愿意,SD卡每次读写数据的最小单位是1个扇区,即512个字节。
2、SD卡允许以块数据进行读取,有的可以用CMD16命令设定每读取的块为512字节
3、SD卡分成:Parition Area 和 Regualr Area,其中Partion Area是存放MBR和PT,Regualr Area包含了System Area 和 User Area。