2009-11-26 76 views

回答

67

下面是一个快速示例,可以帮助您了解所用电池的数量,电池电压和温度。

以下代码粘贴到的活性:

@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秒以下输出:

ERROR/BatteryManager(795): level is 40/100 temp is 320, voltage is 3848

因此,这意味着电池为40%完整,温度为32.0摄氏度,电压为3.848伏特。

+4

这是一个很好的例子,但是为什么你将它记录在“错误”级别? – GetUsername 2011-06-29 07:11:04

+1

@GetUsername除个人偏好之外,没有特别的错误级别日志记录原因。对于在发布我的应用程序之前删除的日志记录,我喜欢登录错误级别,因此很容易在logcat输出中看到日志记录。 – plowman 2011-06-29 17:15:22

0

我需要在电池上安装显示器并检查电平和状态。我正在开发MonoForAndroid,所以这就是我想出的。我把它放在这里以防有人有类似的要求。 (我已经测试过这个并且很好地工作)。

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 
2
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) + "%"; 
    }