代码之家  ›  专栏  ›  技术社区  ›  Jeremy Edwards

SDK中的Android电池

  •  27
  • Jeremy Edwards  · 技术社区  · 16 年前

    有没有从Android SDK获取电池信息的方法?比如剩余电池寿命等等?我不能通过医生找到它。

    4 回复  |  直到 11 年前
        1
  •  23
  •   Jarett Millard    16 年前

    您可以注册一个意图接收器来接收动作“电池更换”的广播: http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED . 医生说广播是粘的,所以即使在电池状态发生变化的时候,你也能抓住它。

        2
  •  67
  •   plowman    14 年前

    下面是一个很快的例子,可以得到使用的电池数量、电池电压和温度。

    将以下代码粘贴到活动中:

    @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伏。

        3
  •  2
  •   XXX    11 年前
        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) + "%";
        }
    
        4
  •  0
  •   Has AlTaiar    12 年前

    我需要在电池上安装一个监视器,检查电量和状态。我正在开发单孔类药物,所以这就是我的想法。我把它放在这里,以防有人有类似的要求。(我已经测试过了,工作得很好)。

    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
    
    推荐文章