Intereting Posts

Аккумулятор Android в SDK

Есть ли способ получить информацию о батарее из Android SDK? Например, срок службы батареи и т. Д.? Я не могу найти его через документы.

Solutions Collecting From Web of "Аккумулятор Android в SDK"

Вы можете зарегистрировать приемник Intent для приема широковещательной передачи для ACTION_BATTERY_CHANGED: http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED . Документы говорят, что трансляция является липкой, поэтому вы сможете ее захватить даже после того, как произойдет изменение состояния батареи.

Ниже приведен краткий пример, в котором вы найдете количество использованной батареи, напряжение батареи и ее температуру.

Вставьте следующий код в действие:

@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 вольт.

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

Мне нужно было иметь монитор на батарее и проверить уровень и статус. Я развиваюсь на 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