SDK中的Android电池
有没有办法从Android SDK获取电池信息?如电池剩余寿命等?我无法通过文档找到它。您可以注册一个意向接收器,以接收行动的广播\u电池\u更改:。医生说广播是粘性的,所以即使在电池状态发生变化后,你也可以抓取它。这里有一个快速的例子,可以告诉你电池的使用量、电池电压和温度 将以下代码粘贴到活动中:SDK中的Android电池,android,power-management,Android,Power Management,有没有办法从Android SDK获取电池信息?如电池剩余寿命等?我无法通过文档找到它。您可以注册一个意向接收器,以接收行动的广播\u电池\u更改:。医生说广播是粘性的,所以即使在电池状态发生变化后,你也可以抓取它。这里有一个快速的例子,可以告诉你电池的使用量、电池电压和温度 将以下代码粘贴到活动中: @Override public void onCreate() { BroadcastReceiver batteryReceiver = new BroadcastReceiver()
@Override
public void onCreate() {
BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
int scale = -1;
int level = -1;
int voltage = -1;
int temp = -1;
@Override
public void onReceive(Context context, Intent intent) {
level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
Log.e("BatteryManager", "level is "+level+"/"+scale+", temp is "+temp+", voltage is "+voltage);
}
};
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryReceiver, filter);
}
在我的手机上,每10秒有以下输出:
错误/电池管理器(795):电平为40/100,温度为320,电压为3848
因此,这意味着电池已满40%,温度为32.0摄氏度,电压为3.848伏。我需要在电池上安装一个监视器,检查电量和状态。我正在开发单孔类,所以这里是我提出的。我把它放在这里,以防有人有类似的要求。(我已经测试过了,效果很好)
你能为这个发布一些示例代码吗。我不知道如何接收广播意图。这是一个很好的例子,但为什么要将其记录在“错误”级别?@GetUsername除了个人偏好之外,没有任何特殊的原因记录错误级别。对于在发布我的应用程序之前删除的日志记录,我喜欢在错误级别进行日志记录,这样就很容易在logcat输出的海洋中看到日志记录。
try
{
var ifilter = new IntentFilter(Intent.ActionBatteryChanged);
Intent batteryStatusIntent = Application.Context.RegisterReceiver(null, ifilter);
var batteryChangedArgs = new AndroidBatteryStateEventArgs(batteryStatusIntent);
_Battery.Level = batteryChangedArgs.Level;
_Battery.Status = batteryChangedArgs.BatteryStatus;
}
catch (Exception exception)
{
ExceptionHandler.HandleException(exception, "BatteryState.Update");
throw new BatteryUpdateException();
}
namespace Leopard.Mobile.Hal.Battery
{
public class AndroidBatteryStateEventArgs : EventArgs
{
public AndroidBatteryStateEventArgs(Intent intent)
{
Level = intent.GetIntExtra(BatteryManager.ExtraLevel, 0);
Scale = intent.GetIntExtra(BatteryManager.ExtraScale, -1);
var status = intent.GetIntExtra(BatteryManager.ExtraStatus, -1);
BatteryStatus = GetBatteryStatus(status);
}
public int Level { get; set; }
public int Scale { get; set; }
public BatteryStatus BatteryStatus { get; set; }
private BatteryStatus GetBatteryStatus(int status)
{
var result = BatteryStatus.Unknown;
if (Enum.IsDefined(typeof(BatteryStatus), status))
{
result = (BatteryStatus)status;
}
return result;
}
}
}
#region Internals
public class AndroidBattery
{
public AndroidBattery(int level, BatteryStatus status)
{
Level = level;
Status = status;
}
public int Level { get; set; }
public BatteryStatus Status { get; set; }
}
public class BatteryUpdateException : Exception
{
}
#endregion
public static String batteryLevel(Context context)
{
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
int percent = (level*100)/scale;
return String.valueOf(percent) + "%";
}