练手小项目(5)安全卫士_电源管理

一直想把外国的一个工具箱的电池那个动画做出来,今天有时间就想做一下 界面是这样的,制作了基本部分,果然还是手机卫士,比较考基础。

练手小项目(5)安全卫士_电源管理_第1张图片


①通过Intent去的手机音量的变化

 电池的电量一直是手机用户所关心的问题,而在android系统中,专门提供了一个取得电池电量的消息 Action—ACTION_BATTERY_CHANGED。


 回到,demo里面 既然我要获取系统的信息,就先注册一个广播,取得电池的信息,BatteryReceiver.java类 广播 四大组件先去配置文件注册一把 我要获取的信息,都在UI上面,用一个map集合装上我们信息 通过handler.dispatchMessage 将信息传过去..................


[html]  view plain copy
  1. package com.example.bettary.recevier;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import com.example.bettary.BatteryManagerActivity;  
  7.   
  8.   
  9. import android.content.BroadcastReceiver;  
  10. import android.content.Context;  
  11. import android.content.Intent;  
  12. import android.os.BatteryManager;  
  13. import android.os.Message;  
  14.   
  15.   
  16.   
  17. /**  
  18.  * @author xiaoxin007  
  19.  * 2014-12-4下午5:53:01  
  20.  * TODO 电池的广播接收者  
  21.  */  
  22. public class BatteryReceiver extends BroadcastReceiver {  
  23.     Map<String, Object> map;  
  24.     private Message message;  
  25.     @Override  
  26.     public void onReceive(Context context, Intent intent) {  
  27.         String action = intent.getAction();  
  28.         if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {  
  29.             map = new HashMap<String, Object>();  
  30.             /** 电池剩余电量 */  
  31.             map.put("level", "" + intent.getIntExtra("level", 0));  
  32.             /** 获取电池满电量数值 */  
  33.             map.put("scale", "" + intent.getIntExtra("scale", 0));  
  34.             /** 获取电池技术支持 */  
  35.             map.put("technology", "" + intent.getStringExtra("technology"));  
  36.             /** 获取电池状态 */  
  37.             map.put("status", ""+ intent.getIntExtra("status",BatteryManager.BATTERY_STATUS_UNKNOWN));  
  38.             /** 获取电源信息 */  
  39.             map.put("plugType", "" + intent.getIntExtra("plugged", 0));  
  40.             /** 获取电池健康度 */  
  41.             map.put("health",""+ intent.getIntExtra("health",BatteryManager.BATTERY_HEALTH_UNKNOWN));  
  42.             /** 获取电池电压 */  
  43.             map.put("voltage", intent.getIntExtra("voltage", 0) + "");  
  44.             /** 获取电池温度 */  
  45.             map.put("temperature", intent.getIntExtra("temperature", 0) + "");  
  46.             if (map!=null) {  
  47.                 message = new Message();  
  48.                 message.obj = map;  
  49.                 BatteryManagerActivity.handler1.dispatchMessage(message);  
  50.             }  
  51.         }  
  52.     }  
  53.   
  54. }  

②通过动画实现电池的递增增加效果

现在开始 activity代码了  布局有点复杂,后面我贴上源码,大家在看吧 

零 动画动起来

1.实例化动画类

[java]  view plain copy
  1. animImageView = new AnimImageView();  

2.动画类实现runnble 进行耗时操作

[html]  view plain copy
  1. public class AnimImageView implements Runnable {  
  2.   
  3.     @Override  
  4.     public void run() {  
  5.         BterryAnim();  
  6.         battery_image.postDelayed(animImageView, 1000);  
  7.     }  
  8.   
  9. }  

通过定义postDelayed 延时一秒后 又执行此线程

3.使用Matrix控制充电动画

[html]  view plain copy
  1. public void BterryAnim() {  
  2.     float[] stateArray = new float[] { 0.1f, 0.25f, 0.5f, 0.75f, 1f };  
  3.   
  4.     Bitmap bitmap = BitmapFactory.decodeResource(getResources(),  
  5.             R.drawable.battery_full);  
  6.     int height = bitmap.getHeight();  
  7.     int width = bitmap.getWidth();  
  8.     // 使用Matrix控制充电动画  
  9.     Matrix matrix = new Matrix();  
  10.     matrix.postScale(stateArray[state], 1.0f);  
  11.     Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height,  
  12.             matrix, false);  
  13.     state = state + 1;  
  14.     battery_image.setImageBitmap(newBitmap);  
  15.     if (state == 5) {  
  16.         state = 0;  
  17.     }  
  18. }  



一初始化布局


[java]  view plain copy
  1.     private void init() {  
  2.         /** 获取电池状态对象 */  
  3.         battery_Status = (TextView) findViewById(R.id.battery_status);  
  4.         /** 获取电池运行状态 */  
  5.         battery_Run_Status = (TextView) findViewById(R.id.battery_health);  
  6.         /** 获取电池电压 */  
  7.         battery_Voltage = (TextView) findViewById(R.id.battery_voltage);  
  8.         /** 获取电池温度 */  
  9.         battery_Temperature = (TextView) findViewById(R.id.battery_temperature);  
  10.         /** 获取电池技术 */  
  11.         battery_Technology = (TextView) findViewById(R.id.battery_technology);  
  12. //      /** 回去电池运行时间 */  
  13. //      battery_Time = (TextView) findViewById(R.id.boot_time);  
  14.         /** 获取电池电量对象 */  
  15.         battery_Level = (TextView) findViewById(R.id.battery);  
  16.         /** 获取充电图标 */  
  17.         bty_Charging = (ImageView) findViewById(R.id.charging);  
  18.         /** 获取充电 */  
  19.         battery_image = (ImageView) findViewById(R.id.battery_image);  
  20.     }  

二注册广播

其实我还在是在代码中注册的  一个意图,一个广播类 

[java]  view plain copy
  1. /** 
  2.  * 注册广播 
  3.  */  
  4. private void regReceiver() {  
  5.     IntentFilter filter = new IntentFilter();  
  6.     filter.addAction(Intent.ACTION_BATTERY_CHANGED);  
  7.     registerReceiver(new BatteryReceiver(), filter);  
  8. }  
然后广播类 通过handler类 将获取的到电池信息 返回回来..........

三通过handler执行UI更新操作

[java]  view plain copy
  1. /** 
  2.          * 接收BatteryReceiver广播类 
  3.          */  
  4.         handler1 = new Handler() {  
  5.             @Override  
  6.             public void handleMessage(Message msg) {  
  7.                 map = (Map<String, Object>) msg.obj;  
  8.                 int health = Integer.parseInt(map.get("health").toString());  
  9.                 Log.i(TAG, health + "");  
  10.                 if (health == 2) {  
  11.                     /** 设置电池运行状态 */  
  12.                     battery_Run_Status.setText("正常");  
  13.                 } else {  
  14.                     /** 设置电池运行状态 */  
  15.                     battery_Run_Status.setText("一般");  
  16.                 }  
  17.   
  18.                 /** 设置电池电压 */  
  19.                 battery_Voltage.setText("" + map.get("voltage") + "mV");  
  20.                 /** 设置电池温度 */  
  21.                 double time = Double.parseDouble(map.get("temperature") + "");  
  22.                 battery_Temperature.setText("" + time / 10 + "°C");  
  23.                 /** 设置电池电量 */  
  24.                 max = Double.parseDouble(map.get("scale") + "");  
  25.                 min = Double.parseDouble(map.get("level") + "");  
  26.                 temp = (min / max);  
  27.                 /** 设置电池技术 */  
  28.                 battery_Technology.setText("" + map.get("technology"));  
  29.                 /** 设置启动时间 */  
  30. //              handler2 = new Handler() {  
  31. //                  @Override  
  32. //                  public void handleMessage(Message msg) {  
  33. //                      battery_Time.setText("" + msg.obj.toString());  
  34. //                  }  
  35. //              };  
  36.                 /** 设置电池状态 为USB充电 */  
  37.                 if (map.get("plugType").equals("2")) {  
  38.                     // 显示充电图片  
  39.                     bty_Charging.setVisibility(View.VISIBLE);  
  40.                     // 绑定显示充电方式为USB  
  41.                     battery_Status.setText("正在充电(USB)");  
  42.                     if (isAnimRun == false) {  
  43.                         // 设置充电动画  
  44.                         battery_image.postDelayed(animImageView, 1000);  
  45.                         isAnimRun = true;  
  46.                     }  
  47.                     /** 设置电池状态 为交流电充电 */  
  48.                 } else if (map.get("plugType").equals("1")) {  
  49.                     // 显示充电图片  
  50.                     bty_Charging.setVisibility(View.VISIBLE);  
  51.                     // 绑定显示充电方式为交流电  
  52.                     battery_Status.setText("正在充电(交流电)");  
  53.                     if (isAnimRun == false) {  
  54.                         // 设置充电动画  
  55.                         battery_image.postDelayed(animImageView, 1000);  
  56.                         isAnimRun = true;  
  57.                     }  
  58.                     /** 设置电池状态 */  
  59.                 } else if (map.get("plugType").equals("0")) {  
  60.                     // 隐藏充电图标  
  61.                     bty_Charging.setVisibility(View.INVISIBLE);  
  62.                     // 设置信息  
  63.                     battery_Status.setText("正在耗电");  
  64.                     if (isAnimRun == true) {  
  65.                         // 结束充电动画  
  66.                         battery_image.removeCallbacks(animImageView);  
  67.                         // 设置电池剩余电量  
  68.                         setSize(temp * 100);  
  69.                         // 动画关闭  
  70.                         isAnimRun = false;  
  71.                     }  
  72.                 }  
  73.                 setSize(temp * 100);  
  74.                 System.out.println(temp + ":" + temp * 100);  
  75.                 battery_Level.setText(temp * 100 + "%");  
  76.             }  
  77.         };  
  78.   
  79.     }  
点击打开链接

你可能感兴趣的:(练手小项目(5)安全卫士_电源管理)