程序员人生 网站导航

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

栏目:综合技术时间:2014-12-23 08:30:31

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



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

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


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


package com.example.bettary.recevier; import java.util.HashMap; import java.util.Map; import com.example.bettary.BatteryManagerActivity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.BatteryManager; import android.os.Message; /** * @author xiaoxin007 * 2014⑴2⑷下午5:53:01 * TODO 电池的广播接收者 */ public class BatteryReceiver extends BroadcastReceiver { Map<String, Object> map; private Message message; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { map = new HashMap<String, Object>(); /** 电池剩余电量 */ map.put("level", "" + intent.getIntExtra("level", 0)); /** 获得电池满电量数值 */ map.put("scale", "" + intent.getIntExtra("scale", 0)); /** 获得电池技术支持 */ map.put("technology", "" + intent.getStringExtra("technology")); /** 获得电池状态 */ map.put("status", ""+ intent.getIntExtra("status",BatteryManager.BATTERY_STATUS_UNKNOWN)); /** 获得电源信息 */ map.put("plugType", "" + intent.getIntExtra("plugged", 0)); /** 获得电池健康度 */ map.put("health",""+ intent.getIntExtra("health",BatteryManager.BATTERY_HEALTH_UNKNOWN)); /** 获得电池电压 */ map.put("voltage", intent.getIntExtra("voltage", 0) + ""); /** 获得电池温度 */ map.put("temperature", intent.getIntExtra("temperature", 0) + ""); if (map!=null) { message = new Message(); message.obj = map; BatteryManagerActivity.handler1.dispatchMessage(message); } } } }

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

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

零 动画动起来

1.实例化动画类

animImageView = new AnimImageView();

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

public class AnimImageView implements Runnable { @Override public void run() { BterryAnim(); battery_image.postDelayed(animImageView, 1000); } }

通过定义postDelayed 延时1秒后 又履行此线程

3.使用Matrix控制充电动画

public void BterryAnim() { float[] stateArray = new float[] { 0.1f, 0.25f, 0.5f, 0.75f, 1f }; Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.battery_full); int height = bitmap.getHeight(); int width = bitmap.getWidth(); // 使用Matrix控制充电动画 Matrix matrix = new Matrix(); matrix.postScale(stateArray[state], 1.0f); Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false); state = state + 1; battery_image.setImageBitmap(newBitmap); if (state == 5) { state = 0; } }



1初始化布局


private void init() { /** 获得电池状态对象 */ battery_Status = (TextView) findViewById(R.id.battery_status); /** 获得电池运行状态 */ battery_Run_Status = (TextView) findViewById(R.id.battery_health); /** 获得电池电压 */ battery_Voltage = (TextView) findViewById(R.id.battery_voltage); /** 获得电池温度 */ battery_Temperature = (TextView) findViewById(R.id.battery_temperature); /** 获得电池技术 */ battery_Technology = (TextView) findViewById(R.id.battery_technology); // /** 回去电池运行时间 */ // battery_Time = (TextView) findViewById(R.id.boot_time); /** 获得电池电量对象 */ battery_Level = (TextView) findViewById(R.id.battery); /** 获得充电图标 */ bty_Charging = (ImageView) findViewById(R.id.charging); /** 获得充电 */ battery_image = (ImageView) findViewById(R.id.battery_image); }

2注册广播

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

/** * 注册广播 */ private void regReceiver() { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); registerReceiver(new BatteryReceiver(), filter); }
然后广播类 通过handler类 将获得的到电池信息 返回回来..........

3通过handler履行UI更新操作

/** * 接收BatteryReceiver广播类 */ handler1 = new Handler() { @Override public void handleMessage(Message msg) { map = (Map<String, Object>) msg.obj; int health = Integer.parseInt(map.get("health").toString()); Log.i(TAG, health + ""); if (health == 2) { /** 设置电池运行状态 */ battery_Run_Status.setText("正常"); } else { /** 设置电池运行状态 */ battery_Run_Status.setText("1般"); } /** 设置电池电压 */ battery_Voltage.setText("" + map.get("voltage") + "mV"); /** 设置电池温度 */ double time = Double.parseDouble(map.get("temperature") + ""); battery_Temperature.setText("" + time / 10 + "°C"); /** 设置电池电量 */ max = Double.parseDouble(map.get("scale") + ""); min = Double.parseDouble(map.get("level") + ""); temp = (min / max); /** 设置电池技术 */ battery_Technology.setText("" + map.get("technology")); /** 设置启动时间 */ // handler2 = new Handler() { // @Override // public void handleMessage(Message msg) { // battery_Time.setText("" + msg.obj.toString()); // } // }; /** 设置电池状态 为USB充电 */ if (map.get("plugType").equals("2")) { // 显示充电图片 bty_Charging.setVisibility(View.VISIBLE); // 绑定显示充电方式为USB battery_Status.setText("正在充电(USB)"); if (isAnimRun == false) { // 设置充电动画 battery_image.postDelayed(animImageView, 1000); isAnimRun = true; } /** 设置电池状态 为交换电充电 */ } else if (map.get("plugType").equals("1")) { // 显示充电图片 bty_Charging.setVisibility(View.VISIBLE); // 绑定显示充电方式为交换电 battery_Status.setText("正在充电(交换电)"); if (isAnimRun == false) { // 设置充电动画 battery_image.postDelayed(animImageView, 1000); isAnimRun = true; } /** 设置电池状态 */ } else if (map.get("plugType").equals("0")) { // 隐藏充电图标 bty_Charging.setVisibility(View.INVISIBLE); // 设置信息 battery_Status.setText("正在耗电"); if (isAnimRun == true) { // 结束充电动画 battery_image.removeCallbacks(animImageView); // 设置电池剩余电量 setSize(temp * 100); // 动画关闭 isAnimRun = false; } } setSize(temp * 100); System.out.println(temp + ":" + temp * 100); battery_Level.setText(temp * 100 + "%"); } }; }
点击下载源码

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐