문제
Android SDK에서 배터리 정보를 얻을 수있는 방법이 있습니까? 배터리 수명이 남아있는 등이 있습니까? 문서를 통해 찾을 수 없습니다.
해결책
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
제휴하지 않습니다 StackOverflow