Android之PowerManagerBatteryManager
PowerManager是Android平臺中用于管理控制設(shè)備電源狀態(tài)、重啟、休眠狀態(tài)、喚醒等,使用該API會影響到電池的待機時間,所以無非必要,一般不要使用。
在PowerManager中有幾個比較重要的公共方法,具體如下:
方法goToSleep、reboot、userActivity需要用到如下權(quán)限:
<uses-permission android:name="android.permission.REBOOT"/>
<uses-permission android:name="android.permission.DEVICE_POWER"/>
而這兩個權(quán)限只有系統(tǒng)App才可使用。
最重要的方法還是newWakeLock,通過該方法,我們可以獲取一個WakeLock對象,通過該對象我們可以控制設(shè)備電源的狀態(tài)。方法的第一個參數(shù)flags用于指示獲取哪種WakeLock,不同的Lock對cpu、屏幕、鍵盤燈有不同的影響,flag的值如下:
下面我們通過一個案例來說明WakeLock的用法,具體代碼如下:
public class PowerManagerActivity extends ActionBarActivity {private PowerManager powerManager;private PowerManager.WakeLock wakeLock;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_power_manager);powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);}private void acquireWakeLock(){wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"wakelock");if(wakeLock!=null)wakeLock.acquire();}private void releaseWakeLock(){if(wakeLock!=null)wakeLock.release();}@Overrideprotected void onResume() {super.onResume();acquireWakeLock();}@Overrideprotected void onPause() {super.onPause();releaseWakeLock();} } 使用該方法需要用到如下權(quán)限:<uses-permission android:name="android.permission.WAKE_LOCK"/>
代碼比較簡單,在獲取WakeLock的時候我們使用了PowerManager.SCREEN_BRIGHT_WAKE_LOCK,該flag表明cpu保持運行,屏幕保持常亮。同時注意WakeLock的acquire方法和release方法要成對使用,在這里利用了Activity的生命周期方法。 還要注意的是WakeLock是Activity級別的不是針對整個Application的。 要想獲取電池信息比如狀態(tài)、健康信息、電池容量等,我們可以通過注冊一個廣播接收者用來接收Intent.ACTION_BATTERY_CHANGED廣播即可,當(dāng)電池發(fā)送變化的時候,系統(tǒng)就會發(fā)出該廣播。Android提供了BatteryManager類,該類主要提供了一些常量,用于從廣播的Intent中提取相關(guān)的數(shù)據(jù),常量列表如下: 定義一個廣播接收者,用于檢測電池狀態(tài)的變化,關(guān)鍵代碼如下: private class BattaryReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){//電池狀態(tài)int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,0);String statusString = "";switch (status){case BatteryManager.BATTERY_STATUS_FULL:statusString="full";break;case BatteryManager.BATTERY_STATUS_CHARGING:statusString="charging";break;case BatteryManager.BATTERY_STATUS_DISCHARGING:statusString="discharging";break;case BatteryManager.BATTERY_STATUS_UNKNOWN:statusString="unknown";break;case BatteryManager.BATTERY_STATUS_NOT_CHARGING:statusString="not charging";break;}// boolean present= intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT,false);//integer field containing the current battery level,int curlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);// integer containing the maximum battery levelint maxLevel = intent.getIntExtra(BatteryManager.EXTRA_SCALE,0);//String describing the technology of the current batteryString technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);//integer containing the current health constantint health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,0);String healthStr = "";switch (health){case BatteryManager.BATTERY_HEALTH_COLD:healthStr="cold";break;case BatteryManager.BATTERY_HEALTH_DEAD:healthStr="dead";break;case BatteryManager.BATTERY_HEALTH_GOOD:healthStr="good";break;case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:healthStr="voer voltage";break;case BatteryManager.BATTERY_HEALTH_UNKNOWN:healthStr="unknown";break;case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:healthStr="unspecified failure";break;}//integer containing the resource ID of a small status bar icon indicating the current battery stateint smallIcon = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,0);//integer indicating whether the device is plugged in to a power source; 0 means it is on battery,// other constants are different types of power sourcesint plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,0);String pluggedStr="";switch (plugged){case BatteryManager.BATTERY_PLUGGED_AC:pluggedStr="AC";break;case BatteryManager.BATTERY_PLUGGED_USB:pluggedStr="USB";break;case BatteryManager.BATTERY_PLUGGED_WIRELESS:pluggedStr="wireless";break;}// integer containing the current battery temperature.int temperature= intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0);// integer containing the current battery voltage level.int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,0);StringBuilder sb = new StringBuilder("status:");sb.append(statusString);sb.append("\n");sb.append("present:").append(present);sb.append("\n");sb.append("level:").append(curlevel);sb.append("\n");sb.append("maxLevel:").append(maxLevel);sb.append("\n");sb.append("technology:").append(technology);sb.append("\n");sb.append("health:").append(healthStr);sb.append("\n");sb.append("icon:").append(smallIcon);sb.append("\n");sb.append("plugged:").append(pluggedStr);sb.append("\n");sb.append("temperature:").append(temperature);sb.append("\n");sb.append("voltage:").append(voltage);sb.append("\n");Message msg= mHandler.obtainMessage(1);msg.obj = sb.toString();mHandler.sendMessage(msg);} } } 主要接收該廣播需要用到權(quán)限:<uses-permission android:name="android.permission.BATTERY_STATS"/>
案例運行結(jié)果如下:
?
作者:杰瑞教育出處:http://www.cnblogs.com/jerehedu/?
版權(quán)聲明:本文版權(quán)歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
技術(shù)咨詢:
轉(zhuǎn)載于:https://www.cnblogs.com/jerehedu/p/4876842.html
總結(jié)
以上是生活随笔為你收集整理的Android之PowerManagerBatteryManager的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 统计难题(map)
- 下一篇: Android 关于Edittext输入