練手小項目(5)安全衛士_電源管理
來源:程序員人生 發布時間:2014-12-23 08:30:31 閱讀次數:3226次
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 + "%");
}
};
}
點擊下載源碼
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈