本文整理自网络,侵删。
如何在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 firedac tfdconnection连接mysql数据库
Delphi整理七(function and procedure)
Delphi xe2 - 万一“获取程序自身大小的函数”改进版
Delphi 网上获取北京时间idhttpserver and idhttp 使用 encoding utf8
更多相关阅读请进入《Delphi》频道 >>