Android手機(jī)電池管理

安卓系統(tǒng)通過廣播來接受電池狀態(tài)剩檀,下面是我寫的一個簡單電池管理項目怠益。

廣播接受類BatteryReceiver如下:

package com.lml.batteryshow;

import java.util.HashMap;

import java.util.Map;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.BatteryManager;

import android.os.Message;

public class BatteryReceiver extends BroadcastReceiver {

Message message;

Map map = null;

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {

map = new HashMap();

/** 電池剩余電量 */

map.put("level",? intent.getIntExtra("level", 0)+"");

/** 獲取電池滿電量數(shù)值 */

map.put("scale",? intent.getIntExtra("scale", 0)+"");

/** 獲取電池技術(shù)支持 */

map.put("technology", intent.getStringExtra("technology"));

/** 獲取電池狀態(tài) */

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;

MainActivity.handler1.dispatchMessage(message);

}

}

}

主類MainActivity代碼實現(xiàn)如下:

package com.lml.batteryshow;

import java.text.DecimalFormat;

import java.util.Map;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.os.SystemClock;

import android.app.Activity;

import android.content.Intent;

import android.content.IntentFilter;

import android.widget.TextView;

public class MainActivity extends Activity {

/** 電池狀態(tài) */

private TextView battery_Status;

/** 電池允許狀態(tài) */

private TextView battery_Run_Status;

/** 電池電壓 */

private TextView battery_Voltage;

/** 電池溫度 */

private TextView battery_Temperature;

/** 電池技術(shù) */

private TextView battery_Technology;

/** 電池運行時間 */

private TextView battery_Time;

/** 電池電量 */

private TextView battery_Level;

Thread? thread;

public static Handler handler1;

public Handler handler2;

BatteryReceiver receiver;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

thread= new Thread(runnable);

thread.start();

regReceiver();

handler1 = new Handler() {

@Override

public void handleMessage(Message msg) {

MainActivity.this.handleMessage(msg);

}

};

/** 設(shè)置啟動時間 */

handler2 = new Handler() {

@Override

public void handleMessage(Message msg) {

battery_Time.setText("啟動后時間:"+msg.obj.toString());

}

};

}

private void regReceiver() {

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_BATTERY_CHANGED);

receiver=new BatteryReceiver();

registerReceiver(receiver, filter);

}

private void handleMessage(Message msg){

@SuppressWarnings("unchecked")

Map map = (Map) msg.obj;

String plugType=map.get("plugType");

/** 設(shè)置電池狀態(tài) 為USB充電 */

if (plugType.equals("2")) {

battery_Status.setText("電池狀態(tài):正在充電(USB)");

}

/** 設(shè)置電池狀態(tài) 為交流電充電 */

else if (plugType.equals("1")) {

battery_Status.setText("電池狀態(tài):正在充電(交流電)");

}

/** 設(shè)置電池狀態(tài) */

else if (plugType.equals("0")) {

battery_Status.setText("電池狀態(tài):正在耗電");

}

/** 獲取電池健康度 */

String? health = map.get("health");

if (health.equals(2)) {

battery_Run_Status.setText("電池健康度;正常");

} else {

battery_Run_Status.setText("電池健康度纱烘;一般");

}

/** 設(shè)置電池電壓 */

battery_Voltage.setText( "電池電壓:"+map.get("voltage") + "mV");

/** 設(shè)置電池溫度 */

double temp = Double.parseDouble(map.get("temperature") );

battery_Temperature.setText("電池溫度:"+ (temp / 10) + "°C");

/** 獲取電池滿電量數(shù)值 */

double scale = Double.parseDouble(map.get("scale") );

/** 獲取電池剩余電量 */

double level = Double.parseDouble(map.get("level") );

double per =level/scale;

String strPer=optionNum(per);

/** 設(shè)置電池電量 */

battery_Level.setText("電池電量:"+Double.parseDouble(strPer) * 100 + "%");

/** 設(shè)置電池技術(shù) */

battery_Technology.setText( "電池技術(shù):"+map.get("technology"));

}

@Override

protected void onDestroy() {

super.onDestroy();

thread.interrupt();

unregisterReceiver(receiver);

}

public String optionNum(double f) {

DecimalFormat df = new DecimalFormat("#.00");

return df.format(f);

}

private void init() {

/** 獲取電池狀態(tài)對象 */

battery_Status = (TextView) findViewById(R.id.battery_status);

/** 獲取電池運行狀態(tài) */

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

/** 獲取電池技術(shù) */

battery_Technology = (TextView) findViewById(R.id.battery_technology);

/** 開機(jī)電池運行時間 */

battery_Time = (TextView) findViewById(R.id.boot_time);

/** 獲取電池電量對象 */

battery_Level = (TextView) findViewById(R.id.battery);

}

Runnable runnable=new Runnable() {

@Override

public void run() {

while (true) {

try {

Thread.sleep(1000);

long temp = SystemClock.elapsedRealtime();

Message message = new Message();

message.obj = Util.transitionTime(temp);

handler2.sendMessage(message);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

};

}

幫助類util如下:

package com.lml.batteryshow;

public class Util {

public static String transitionTime(long time) {

long temp1 = time / 1000;

long temp2 = temp1 / 60;

long temp3 = temp2 / 60;

String h = temp3 % 60 + "";

String m = temp2 % 60 + "";

String s = temp1 % 60 + "";

if (m.length() < 2) {

m = "0" + m;

}

if (s.length() < 2) {

s = "0" + s;

}

String time1 = h + ":" + m + ":" + s;

System.out.println(time1);

return time1;

}

}

布局文件activity_main.xml如下:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:padding="50dp"

android:gravity="center_vertical">

android:gravity="center"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="電池狀態(tài)"

android:textSize="20sp"

android:layout_marginBottom="40dp"/>

android:id="@+id/battery_status"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

android:id="@+id/battery_health"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

android:id="@+id/battery_voltage"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

android:id="@+id/battery_temperature"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

android:id="@+id/battery_technology"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

android:id="@+id/battery"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

android:id="@+id/boot_time"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

這是簡單的實現(xiàn)的電源管理曲楚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幢痘,一起剝皮案震驚了整個濱河市裂七,隨后出現(xiàn)的幾起案子皆看,更是在濱河造成了極大的恐慌,老刑警劉巖背零,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腰吟,死亡現(xiàn)場離奇詭異,居然都是意外死亡徙瓶,警方通過查閱死者的電腦和手機(jī)毛雇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侦镇,“玉大人灵疮,你說我怎么就攤上這事∷渎疲” “怎么了始藕?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長氮趋。 經(jīng)常有香客問我伍派,道長,這世上最難降的妖魔是什么剩胁? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任诉植,我火速辦了婚禮,結(jié)果婚禮上昵观,老公的妹妹穿的比我還像新娘晾腔。我一直安慰自己,他們只是感情好啊犬,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布灼擂。 她就那樣靜靜地躺著,像睡著了一般觉至。 火紅的嫁衣襯著肌膚如雪剔应。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天语御,我揣著相機(jī)與錄音峻贮,去河邊找鬼。 笑死应闯,一個胖子當(dāng)著我的面吹牛纤控,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碉纺,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼船万,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骨田?” 一聲冷哼從身側(cè)響起唬涧,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盛撑,沒想到半個月后碎节,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡抵卫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年狮荔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片介粘。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡殖氏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姻采,到底是詐尸還是另有隱情雅采,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站婚瓜,受9級特大地震影響宝鼓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巴刻,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一愚铡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胡陪,春花似錦沥寥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妈经,卻和暖如春蒂阱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狂塘。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工录煤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荞胡。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓妈踊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泪漂。 傳聞我的和親對象是個殘疾皇子廊营,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容