Delphi XE5 Android应用程序获取电池信息


本文整理自网络,侵删。

 
如何在Delphi XE5的Android应用程序中获取电池信息。

使用android.os.BatteryManager类获取Android电池信息。

将android.os.BatteryManager类移植到Delphi。

uses Androidapi.JNI.JavaTypes,
  Androidapi.JNIBridge;

type
  JBatteryManagerClass = interface(JObjectClass)
    ['{739F38F8-E2A2-4016-8739-3F073A0E3E60}'] // CTRL+SHIFT+G
    function _GetBATTERY_HEALTH_COLD: Integer;
    function _GetBATTERY_HEALTH_DEAD: Integer;
    function _GetBATTERY_HEALTH_GOOD: Integer;
    function _GetBATTERY_HEALTH_OVERHEAT: Integer;
    function _GetBATTERY_HEALTH_OVER_VOLTAGE: Integer;
    function _GetBATTERY_HEALTH_UNKNOWN: Integer;
    function _GetBATTERY_HEALTH_UNSPECIFIED_FAILURE: Integer;
    function _GetBATTERY_PLUGGED_AC: Integer;
    function _GetBATTERY_PLUGGED_USB: Integer;
    function _GetBATTERY_PLUGGED_WIRELESS: Integer;
    function _GetBATTERY_STATUS_CHARGING: Integer;
    function _GetBATTERY_STATUS_DISCHARGING: Integer;
    function _GetBATTERY_STATUS_FULL: Integer;
    function _GetBATTERY_STATUS_NOT_CHARGING: Integer;
    function _GetBATTERY_STATUS_UNKNOWN: Integer;
    function _GetEXTRA_HEALTH: JString;
    function _GetEXTRA_ICON_SMALL: JString;
    function _GetEXTRA_LEVEL: JString;
    function _GetEXTRA_PLUGGED: JString;
    function _GetEXTRA_PRESENT: JString;
    function _GetEXTRA_SCALE: JString;
    function _GetEXTRA_STATUS: JString;
    function _GetEXTRA_TECHNOLOGY: JString;
    function _GetEXTRA_TEMPERATURE: JString;
    function _GetEXTRA_VOLTAGE: JString;

    property BATTERY_HEALTH_COLD: Integer read _GetBATTERY_HEALTH_COLD;
    property BATTERY_HEALTH_DEAD: Integer read _GetBATTERY_HEALTH_DEAD;
    property BATTERY_HEALTH_GOOD: Integer read _GetBATTERY_HEALTH_GOOD;
    property BATTERY_HEALTH_OVERHEAT: Integer read _GetBATTERY_HEALTH_OVERHEAT;
    property BATTERY_HEALTH_OVER_VOLTAGE: Integer
      read _GetBATTERY_HEALTH_OVER_VOLTAGE;
    property BATTERY_HEALTH_UNKNOWN: Integer read _GetBATTERY_HEALTH_UNKNOWN;
    property BATTERY_HEALTH_UNSPECIFIED_FAILURE: Integer
      read _GetBATTERY_HEALTH_UNSPECIFIED_FAILURE;
    property BATTERY_PLUGGED_AC: Integer read _GetBATTERY_PLUGGED_AC;
    property BATTERY_PLUGGED_USB: Integer read _GetBATTERY_PLUGGED_USB;
    property BATTERY_PLUGGED_WIRELESS: Integer
      read _GetBATTERY_PLUGGED_WIRELESS;
    property BATTERY_STATUS_CHARGING: Integer read _GetBATTERY_STATUS_CHARGING;
    property BATTERY_STATUS_DISCHARGING: Integer
      read _GetBATTERY_STATUS_DISCHARGING;
    property BATTERY_STATUS_FULL: Integer read _GetBATTERY_STATUS_FULL;
    property BATTERY_STATUS_NOT_CHARGING: Integer
      read _GetBATTERY_STATUS_NOT_CHARGING;
    property BATTERY_STATUS_UNKNOWN: Integer read _GetBATTERY_STATUS_UNKNOWN;
    property EXTRA_HEALTH: JString read _GetEXTRA_HEALTH;
    property EXTRA_HEALTHEXTRA_HEALTHEXTRA_ICON_SMALL: JString
      read _GetEXTRA_ICON_SMALL;
    property EXTRA_LEVEL: JString read _GetEXTRA_LEVEL;
    property EXTRA_PLUGGED: JString read _GetEXTRA_PLUGGED;
    property EXTRA_PRESENT: JString read _GetEXTRA_PRESENT;
    property EXTRA_SCALE: JString read _GetEXTRA_SCALE;
    property EXTRA_STATUS: JString read _GetEXTRA_STATUS;
    property EXTRA_TECHNOLOGY: JString read _GetEXTRA_TECHNOLOGY;
    property EXTRA_TEMPERATURE: JString read _GetEXTRA_TEMPERATURE;
    property EXTRA_VOLTAGE: JString read _GetEXTRA_VOLTAGE;
  end;

  [JavaSignature('android/os/BatteryManager')]
  JBatteryManager = interface(JObject)
    ['{73085A7C-18A7-4295-A0E2-A7B7D2C0EACB}'] // CTRL+SHIFT+G
  end;

  TJBatteryManager = class(TJavaGenericImport<JBatteryManagerClass,
    JBatteryManager>)
  end;
在窗体上放置一个按钮(TButton)和一个注释(TMemo)。

001

为按钮添加一个OnClick事件。

uses Androidapi.JNI.JavaTypes,
  Androidapi.JNIBridge,
  FMX.Platform.Android,
  Androidapi.JNI.GraphicsContentViewText;

procedure TForm1.Button1Click(Sender: TObject);
var
  Filter: JIntentFilter;
  Battery: JIntent;
  Status, Health, Level, Scale, IconSmall, Plugged, Voltage,
    Temperature: Integer;
  Present: Boolean;
  Technology, StatusString, HealthString, ScString: string;
begin
  Filter := TJIntentFilter.JavaClass.init
    (TJIntent.JavaClass.ACTION_BATTERY_CHANGED);
  Battery := MainActivity.registerReceiver(nil, Filter);

  Status := Battery.getIntExtra(StringToJString('status'), 0);
  Health := Battery.getIntExtra(StringToJString('health'), 0);
  Present := Battery.getBooleanExtra(StringToJString('present'), false);
  Level := Battery.getIntExtra(StringToJString('level'), 0);
  Scale := Battery.getIntExtra(StringToJString('scale'), 0);
  IconSmall := Battery.getIntExtra(StringToJString('icon-small'), 0);
  Plugged := Battery.getIntExtra(StringToJString('plugged'), 0);
  Voltage := Battery.getIntExtra(StringToJString('voltage'), 0);
  Temperature := Battery.getIntExtra(StringToJString('temperature'), 0);
  Technology := JStringToString
    (Battery.getStringExtra(StringToJString('technology')));

  StatusString := '';

  if Status = TJBatteryManager.JavaClass.BATTERY_STATUS_UNKNOWN then
    StatusString := 'UNKNOWN'
  else if Status = TJBatteryManager.JavaClass.BATTERY_STATUS_CHARGING then
    StatusString := 'CHARGING'
  else if Status = TJBatteryManager.JavaClass.BATTERY_STATUS_DISCHARGING then
    StatusString := 'DISCHARGING'
  else if Status = TJBatteryManager.JavaClass.BATTERY_STATUS_NOT_CHARGING then
    StatusString := 'NOT CHARGING'
  else if Status = TJBatteryManager.JavaClass.BATTERY_STATUS_FULL then
    StatusString := 'FULL';

  HealthString := '';

  if Health = TJBatteryManager.JavaClass.BATTERY_HEALTH_UNKNOWN then
    HealthString := 'UNKNOWN'
  else if Health = TJBatteryManager.JavaClass.BATTERY_HEALTH_GOOD then
    HealthString := 'GOOD'
  else if Health = TJBatteryManager.JavaClass.BATTERY_HEALTH_OVERHEAT then
    HealthString := 'OVERHEAT'
  else if Health = TJBatteryManager.JavaClass.BATTERY_HEALTH_DEAD then
    HealthString := 'DEAD'
  else if Health = TJBatteryManager.JavaClass.BATTERY_HEALTH_OVER_VOLTAGE then
    HealthString := 'OVER VOLTAGE'
  else if Health = TJBatteryManager.JavaClass.BATTERY_HEALTH_UNSPECIFIED_FAILURE
  then
    HealthString := 'UNSPECIFIED FAILURE';

  ScString := '';

  if Plugged = TJBatteryManager.JavaClass.BATTERY_PLUGGED_AC then
    ScString := 'AC'
  else if Plugged = TJBatteryManager.JavaClass.BATTERY_PLUGGED_USB then
    ScString := 'USB';

  Memo1.Lines.Clear;
  Memo1.Lines.Add(Format('%s=%s', ['Status(充?状?B)', StatusString]));
  Memo1.Lines.Add(Format('%s=%s', ['Health(电池状态)', HealthString]));
  Memo1.Lines.Add(Format('%s=%s', ['Present(是否存在电池)',
    BoolToStr(Present, True)]));
  Memo1.Lines.Add(Format('%s=%d', ['Level(电池余量)', Level]));
  Memo1.Lines.Add(Format('%s=%d', ['Scale(最大电池余量)', Scale]));
  Memo1.Lines.Add(Format('%s=%d', ['Icon Small', IconSmall]));
  Memo1.Lines.Add(Format('%s=%s', ['Plugged(AC or USB)', ScString]));
  Memo1.Lines.Add(Format('%s=%d', ['Voltage(电池电压)', Voltage]));
  Memo1.Lines.Add(Format('%s=%d', ['Temperature(电池电压)', Temperature]));
  Memo1.Lines.Add(Format('%s=%s', ['Technology', Technology]));
end;
运行该应用程序,然后按按钮以显示电池信息。

相关阅读 >>

Delphi 的tstringbuilder防止服务器内存碎片化

Delphi xe android/ios 手势介绍

Delphi firedac tfdconnection连接mysql数据库

Delphi vcl tmemo加速字符串读取

Delphi整理七(function and procedure)

Delphi10.3 构造生成输出json数据

Delphi xe6调用android手机标准功能

Delphi xe2 - 万一“获取程序自身大小的函数”改进版

Delphi 网上获取北京时间idhttpserver and idhttp 使用 encoding utf8

Delphi 获取系统桌面大小

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...