android学习笔记一(电池、内存、系统文件)

电池信息验证

 

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。

你可能感兴趣的:(android,linux,Blog,Access)