




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android中电池信息(Battery information)的取得日期:2010-08-23 来源:Linux社区 作者:Linux这里介绍电池信息的取得. Android.content.BroadcastReceiver类 Android.os.BatteryManager类 电池信息的取得,调用registerReceiver()方法。 第1个参数,设置BroadcastReceiver实例 第2个参数,设置追加了Intent.ACTION_BATTERY_CHANGED处理的IntentFilter实例。 在BroadcastReceiver的onReceive()事件,接收到的Intent.ACTION_BATTERY_CHANGED,包括下面的信息。 “status”(int类型)状态,定义值是BatteryManager.BATTERY_STATUS_XXX。 “health”(int类型)健康,定义值是BatteryManager.BATTERY_HEALTH_XXX。 “present”(boolean类型) “level”(int类型)电池剩余容量 “scale”(int类型)电池最大值。通常为100。 “icon-small”(int类型)图标ID。 “plugged”(int类型)连接的电源插座,定义值是BatteryManager.BATTERY_PLUGGED_XXX。 “voltage”(int类型)mV。 “temperature”(int类型)温度,0.1度单位。例如 表示197的时候,意思为19.7度。 “technology”(String类型)电池类型,例如,Li-ion等等。例程源码(Java)package com.adakoda.batterytest;import Android.app.Activity;import Android.content.BroadcastReceiver;import Android.content.Context;import Android.content.Intent;import Android.content.IntentFilter;import Android.os.BatteryManager;import Android.os.Bundle;import Android.util.Log;public class BatteryTestActivity extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); Override protected void onResume() super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); registerReceiver(mBroadcastReceiver, filter); Override protected void onPause() super.onPause(); unregisterReceiver(mBroadcastReceiver); private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() Override public void onReceive(Context context, Intent intent) String action = intent.getAction(); if (action.equals(Intent.ACTION_BATTERY_CHANGED) int status = intent.getIntExtra(status, 0); int health = intent.getIntExtra(health, 0); boolean present = intent.getBooleanExtra(present, false); int level = intent.getIntExtra(level, 0); int scale = intent.getIntExtra(scale, 0); int icon_small = intent.getIntExtra(icon-small, 0); int plugged = intent.getIntExtra(plugged, 0); int voltage = intent.getIntExtra(voltage, 0); int temperature = intent.getIntExtra(temperature, 0); String technology = intent.getStringExtra(technology); String statusString = ; switch (status) case BatteryManager.BATTERY_STATUS_UNKNOWN: statusString = unknown; break; case BatteryManager.BATTERY_STATUS_CHARGING: statusString = charging; break; case BatteryManager.BATTERY_STATUS_DISCHARGING: statusString = discharging; break; case BatteryManager.BATTERY_STATUS_NOT_CHARGING: statusString = not charging; break; case BatteryManager.BATTERY_STATUS_FULL: statusString = full; break; String healthString = ; switch (health) case BatteryManager.BATTERY_HEALTH_UNKNOWN: healthString = unknown; break; case BatteryManager.BATTERY_HEALTH_GOOD: healthString = good; break; case BatteryManager.BATTERY_HEALTH_OVERHEAT: healthString = overheat; break; case BatteryManager.BATTERY_HEALTH_DEAD: healthString = dead; break; case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: healthString = voltage; break; case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: healthString = unspecified failure; break; String acString = ; switch (plugged) case BatteryManager.BATTERY_PLUGGED_AC: acString = plugged ac; break; case BatteryManager.BATTERY_PLUGGED_USB: acString = plugged usb; break; Log.v(status, statusString); Log.v(health, healthString); Log.v(present, String.valueOf(present); Log.v(level, String.valueOf(level); Log.v(scale, String.valueOf(scale); Log.v(icon_small, String.valueOf(icon_small); Log.v(plugged, acString); Log.v(voltage, String.valueOf(voltage); Log.v(temperature, String.valueOf(temperature); Log.v(technology, technology); ; Android中电池信息(Battery information)的取得 收藏原文地址:/sharp2wing/archive/2010/08/20/5826493.aspx这里介绍电池信息的取得. android.content.BroadcastReceiver类 android.os.BatteryManager类 电池信息的取得,调用registerReceiver()方法。 第1个参数,设置BroadcastReceiver实例 第2个参数,设置追加了Intent.ACTION_BATTERY_CHANGED处理的IntentFilter实例。 在BroadcastReceiver的onReceive()事件,接收到的Intent.ACTION_BATTERY_CHANGED,包括下面的信息。 “status”(int类型)状态,定义值是BatteryManager.BATTERY_STATUS_XXX。 “health”(int类型)健康,定义值是BatteryManager.BATTERY_HEALTH_XXX。 “present”(boolean类型) “level”(int类型)电池剩余容量 “scale”(int类型)电池最大值。通常为100。 “icon-small”(int类型)图标ID。 “plugged”(int类型)连接的电源插座,定义值是BatteryManager.BATTERY_PLUGGED_XXX。 “voltage”(int类型)mV。 “temperature”(int类型)温度,0.1度单位。例如 表示197的时候,意思为19.7度。 “technology”(String类型)电池类型,例如,Li-ion等等。 原创 Android中的 BatteryService 及相关组件 收藏转载时请注明出处和作者联系方式文章出处:/blog作者联系方式:李先静 BatteryService作为电池及充电相关的服务,它的实现非常简单:o 监听UEvent,读取sysfs里中的状态。实现了一个UEvent的观察者。uevent是Linux内核用来向用户空间主动上报事件的机制,对于JAVA程序来说,只实现UEventObserver的虚函数onUEvent,然后注册即可。 private UEventObserver mUEventObserver = new UEventObserver() Override public void onUEvent(UEventObserver.UEvent event) update(); ;这里只关注power_supply的事件:mUEventObserver.startObserving(SUBSYSTEM=power_supply);当有power_supply相关的事件上报时,就会调用update函数。update先调用native_update从sysfs中读取相关状态(com_android_server_BatteryService.cpp):Linux驱动提供了下列文件,供应用程序获取电源相关状态:#define AC_ONLINE_PATH /sys/class/power_supply/ac/online#define USB_ONLINE_PATH /sys/class/power_supply/usb/online#define BATTERY_STATUS_PATH /sys/class/power_supply/battery/status#define BATTERY_HEALTH_PATH /sys/class/power_supply/battery/health#define BATTERY_PRESENT_PATH /sys/class/power_supply/battery/present#define BATTERY_CAPACITY_PATH /sys/class/power_supply/battery/capacity#define BATTERY_VOLTAGE_PATH /sys/class/power_supply/battery/batt_vol#define BATTERY_TEMPERATURE_PATH /sys/class/power_supply/battery/batt_temp#define BATTERY_TECHNOLOGY_PATH /sys/class/power_supply/battery/technology在DA9034驱动程序阅读笔记(6)一文中,我已经提到drivers/power/micco_power.c里注册了充电器(ac)、 usb和电池(battery)三个power_supply。各个power_supply提供的属性和上述文件是对应的,从这些文件中可以读到充电器 (ac)、usb和电池(battery)三个power_supply的相应状态。update然后根据读到的状态更新BatteryService的成员变量,并广播一个Intent来通知其它关注电源状态的组件。 private final void sendIntent() / Pack up the values and broadcast them to everyone Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); try mBatteryStats.setOnBattery(mPlugType = BATTERY_PLUGGED_NONE, mBatteryLevel); catch (RemoteException e) / Should never happen. int icon = getIcon(mBatteryLevel); intent.putExtra(status, mBatteryStatus); intent.putExtra(health, mBatteryHealth); intent.putExtra(present, mBatteryPresent); intent.putExtra(level, mBatteryLevel); intent.putExtra(scale, BATTERY_SCALE); intent.putExtra(icon-small, icon); intent.putExtra(plugged, mPlugType); intent.putExtra(voltage, mBatteryVoltage); intent.putExtra(temperature, mBatteryTemperature); intent.putExtra(technology, mBatteryTechnology); ActivityManagerNative.broadcastStickyIntent(intent, null); 关注ACTION_BATTERY_CHANGED的地方有好几个:o KeyguardUpdateMonitor 这里主要是用来更新锁屏界面下的电池状态。还有低电警告和关机也是在这里做的。 private void handleBatteryUpdate(int pluggedInStatus, int batteryLevel) if (DEBUG) Log.d(TAG, handleBatteryUpdate); final boolean pluggedIn = isPluggedIn(pluggedInStatus); if (isBatteryUpdateInteresting(pluggedIn, batteryLevel) mBatteryLevel = batteryLevel; mDevicePluggedIn = pluggedIn; for (int i = 0; i = 0 & level = 90); if (batteryCharging != mBatteryCharging | batteryLow != mBatteryLow | batteryFull != mBatteryFull) mBatteryCharging = batteryCharging; mBatteryLow = batteryLow; mBatteryFull = batteryFull; updateLights(); o PowerManagerService 这里主要是做两件事件,先是检查是否在充电时不允许睡眠,并采用相应的行动,其次是触发一个用户行为(会影响下一次睡眠的时间)。 private final class BatteryReceiver extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) synchronized (mLocks) boolean wasPowered = mIsPowered; mIsPowered = mBatteryService.isPowered(); if (mIsPowered != wasPowered) / update mStayOnWhilePluggedIn wake lock updateWakeLockLocked(); / treat plugging and unplugging the devices as a user activity. / users find it disconcerting when they unplug the device / and it shuts off right away. / temporarily set mUserActivityAllowed to true so this will work / even when the keyguard is on. synchronized (mLocks) boolean savedActivityAllowed = mUserActivityAllowed; mUserActivityAllowed = true; userActivity(SystemClock.uptimeMillis(), false); mUserActivityAllowed = savedActivityAllowed; o LocationManagerService 这里似乎没有什么用处,我没找到mCollector赋值的地方。 if (action.equals(Intent.ACTION_BATTERY_CHANGED) log(PowerStateBroadcastReceiver: Battery changed); synchronized (mLocationListeners) int scale = intent.getIntExtra(BATTERY_EXTRA_SCALE, 100); int level = intent.getIntExtra(BATTERY_EXTRA_LEVEL, 0); boolean plugged = intent.getIntExtra(BATTERY_EXTRA_PLUGGED, 0) != 0; / Notify collector battery state if (mCollector != null) mCollector.updateBatteryState(scale, level, plugged); o WifiService 根据电源状态来决定是否需要定时唤醒(没搞得太明白,看Wifi服务时再研究)。if (action.equals(Intent.ACTION_BATTERY_CHANGED) /* * Set a timer to put Wi-Fi to sleep, but only if the screen is off * AND we are transitioning from a state in which the device was supposed * to stay awake to a state in which it is not supposed to stay awake. * If stay awake state is not changing, we do nothing, to avoid resetting * the already-set timer. */ int pluggedType = intent.getIntExtra(plugged, 0); if (mScreenOff & shouldWifiStayAwake(stayAwakeConditions, mPluggedType) & !shouldWifiStayAwake(stayAwakeConditions, pluggedType) long triggerTime = System.currentTimeMillis() + idleMillis; mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, mIdleIntent); mPluggedType = pluggedType; return; mPluggedType = pluggedType; o StatusBarPolicy 用来更新状态栏上的充电图标。if (action.equals(Intent.ACTION_BATTERY_CHANGED) updateBattery(intent); Android手机电池信息Android 开发技术 2009-08-09 12:22:25 阅读580 评论0 字号:大中小 订阅以下是手机电池的一些信息,很有用的。可以获得手机的好多参数。如电压,手机电量的多少,等等。package com.android.settings; 19 import android.app.Activity; 20 import android.content.BroadcastReceiver; 21 import android.content.Context; 22 import android.content.Intent; 23 import android.content.IntentFilter; 24 import android.os.BatteryManager; 25 import android.os.Bundle; 26 import android.os.Handler; 27 import android.os.IPowerManager; 28 import android.os.Message; 29 import android.os.RemoteException; 30 import android.os.ServiceManager; 31 import android.os.SystemClock; 32 import android.text.format.DateUtils; 33 import android.widget.TextView; 34 35 import ernal.app.IBatteryStats; 36 37 public class BatteryInfo extends Activity 38 private TextView mStatus; 39 private TextView mLevel; 40 private TextView mScale; 41 private TextView mHealth; 42 private TextView mVoltage; 43 private TextView mTemperature; 44 private TextView mTechnology; 45 private TextView mUptime; 46 private IBatteryStats mBatteryStats; 47 private IPowerManager mScreenStats; 48 49 private static final int EVENT_TICK = 1; 50 51 private Handler mHandler = new Handler() 52 Override 53 public void handleMessage(Message msg) 54 switch (msg.what) 55 case EVENT_TICK: 56 updateBatteryStats(); 57 sendEmptyMessageDelayed(EVENT_TICK, 1000); 58 59 break; 60 61 62 ; 63 64 /* 65 * Format a number of tenths-units as a decimal string without using a 66 * conversion to float. E.g. 347 - 34.7 67 */ 68 private final String tenthsToFixedString(int x) 69 int tens = x / 10; 70 return new String( + tens + . + (x - 10*tens); 71 72 73 /* 74 *Listens for intent broadcasts 75 */ 76 private IntentFilter mIntentFilter; 77 78 private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() 79 Override 80 public void onReceive(Context context, Intent intent) 81 String action = intent.getAction(); 82 if (action.equals(Intent.ACTION_BATTERY_CHANGED) 83 int plugType = intent.getIntExtra(plugged, 0); 84 85 mLevel.setText( + intent.getIntExtra(level, 0); 86 mScale.setText( + intent.getIntExtra(scale, 0); 87 mVoltage.setText( + intent.getIntExtra(voltage, 0) + 88 + getString(R.string.battery_info_voltage_units); 89 mTemperature.setText( + tenthsToFixedString(intent.getIntExtra(temperature, 0) 90 + getString(R.string.battery_info_temperature_units); 91 mTechnology.setText( + intent.getStringExtra(technology); 92 93 int status = intent.getIntExtra(status, BatteryManager.BATTERY_STATUS_UNKNOWN); 94 String statusString; 95 if (status = BatteryManager.BATTERY_STATUS_CHARGING) 96 statusString = getString(R.string.battery_info_status_charging); 97 if (plugType 0) 98 statusString = statusString + + getString( 99 (plugType = BatteryManager.BATTERY_PLUGGED_AC) 100 ? R.string.battery_info_status_charging_ac 101 : R.string.battery_info_status_charging_usb); 102 103 else if (status = BatteryManager.BATTERY_STATUS_DISCHARGIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光的反射现象课件
- 智能决策支持系统考核试卷
- 航空公司航空器维修质量控制考核试卷
- 纸品绿色化学考核试卷
- 教育培训广告考核试卷
- 综采工作面过钻杆安全技术措施
- 硅的化学提炼考核试卷
- 2024年中学学校安全疏散应急预案
- 建筑施工中的安全生产法规与标准考核试卷
- 中医肺癌教学查房
- 主力操盘手法揭秘
- 农耕文化视域下小学生劳动教育初探 论文
- 2023版国开电大本科《高级财务会计》在线形考(任务一至四)试题及答案
- 中医外科学其他外科疾病课件
- 钢筋工程量计算图解讲义
- 初中生物实验报告单
- 汽车主减速器及差速器的结构设计与强度分析毕业设计
- 口腔颌面部损伤 口腔颌面部软组织损伤
- 某石料厂年产10万吨石灰岩开采建设项目可行性研究报告
- 2023年雅安市人力资源和社会保障局招考聘用编外工作人员模拟预测(共1000题)笔试备考题库及答案解析
- 台湾大学欧丽娟老师的中国文学史讲义
评论
0/150
提交评论