1./res/layout/main.xml
2.Main.java
package tw.android; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.LevelListDrawable; import android.os.BatteryManager; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class Main extends Activity { private Button btBattery; private TextView tvBatteryInfo; private ImageView ivBattery; private String healthState,acOrUSB,batteryState; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btBattery = (Button) findViewById(R.id.btBattery); tvBatteryInfo = (TextView) findViewById(R.id.tvBatteryInfo); ivBattery = (ImageView) findViewById(R.id.ivBattery); btBattery.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { runInfo(); } }); } public void runInfo(){ /*電池訊息*/ this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){ @SuppressWarnings("deprecation") @Override public void onReceive(Context ctxt, Intent intent) { int health= intent.getIntExtra(BatteryManager.EXTRA_HEALTH,0); //健康狀態 int icon_small= intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,0); //電池i-con圖 int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0); //目前電量 int plugged= intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,0); //電流來源 boolean present= intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT); //電池存在否 int scale= intent.getIntExtra(BatteryManager.EXTRA_SCALE,0); //電量最大值 int status= intent.getIntExtra(BatteryManager.EXTRA_STATUS,0); //充電狀態 String technology= intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); //電池技術 int temperature= intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0); //目前溫度 int voltage= intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,0); //目前電壓 /*判斷健康狀態*/ switch (health) { case BatteryManager.BATTERY_HEALTH_COLD: healthState = "COLD"; break; case BatteryManager.BATTERY_HEALTH_DEAD: healthState = "DEAD"; break; case BatteryManager.BATTERY_HEALTH_GOOD: healthState = "GOOD"; break; case BatteryManager.BATTERY_HEALTH_OVERHEAT: healthState = "OVERHEAT"; break; case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: healthState = "OVER_VOLTAGE"; break; case BatteryManager.BATTERY_HEALTH_UNKNOWN: healthState = "UNKNOWN"; break; case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: healthState = "UNSPECIFIED_FAILURE"; break; default: break; } /*電池i-con圖*/ LevelListDrawable batteryLevel = (LevelListDrawable) getResources().getDrawable(icon_small); batteryLevel.setLevel(level); ivBattery.setBackgroundDrawable(batteryLevel); /*判斷電流來源*/ switch (plugged) { case BatteryManager.BATTERY_PLUGGED_AC: acOrUSB = "使用AC"; break; case BatteryManager.BATTERY_PLUGGED_USB: acOrUSB = "使用USB"; break; default: break; } /*判斷充電狀態來源*/ switch (status) { case BatteryManager.BATTERY_STATUS_CHARGING: batteryState = "充電中"; break; case BatteryManager.BATTERY_STATUS_DISCHARGING: batteryState = "取消充電"; break; case BatteryManager.BATTERY_STATUS_FULL: batteryState = "電量已滿"; break; case BatteryManager.BATTERY_STATUS_NOT_CHARGING: batteryState = "未充電"; break; case BatteryManager.BATTERY_STATUS_UNKNOWN: batteryState = "未知"; break; default: break; } tvBatteryInfo.setText("健康狀態: "+healthState+"\n"+ "目前電量: "+level+"% \n"+ "電流來源: "+acOrUSB+"\n"+ "電池存在: "+present+"\n"+ "電量最大值: "+scale+"%\n"+ "充電狀態: "+batteryState+"\n"+ "電池技術: "+technology+"\n"+ "目前溫度: "+temperature+"度\n"+ "目前電壓: "+voltage+"\n"); } }; @Override protected void onDestroy() { super.onDestroy(); //結束後要移除,否則會出現 Activity xxx has leaked IntentReceiver unregisterReceiver(mBatInfoReceiver); } }
檔案下載:
https://github.com/terryyamg/JudgeBatteryTest
參考來源:
http://mobiledevtuts.com/android/android-sdk-get-device-battery-information/
http://stackoverflow.com/questions/4891598/android-access-system-drawables
http://stackoverflow.com/questions/9781769/activity-has-leaked-intentreceiver
沒有留言 :
張貼留言