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

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

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


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

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


 回到,demo里面 既然我要获取系统的信息,就先注册一个广播,取得电池的信息,BatteryReceiver.java类 广播 四大组件先去配置文件注册一把 我要获取的信息,都在UI上面,用一个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-12-4下午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 延时一秒后 又执行此线程

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;
		}
	}



一初始化布局


	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);
	}

二注册广播

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

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

三通过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("一般");
				}

				/** 设置电池电压 */
				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 + "%");
			}
		};

	}
点击下载源码

你可能感兴趣的:(android,安全卫士)