Demo与代码已上传到CSDN下载。
这里简单说一下代码内容,完整代码请自行下载,不清楚的欢迎留言交流。
前言
演示Demo使用了我自己开发的一个控件,TLayoutPro
《Delphi D10.3 LayoutsPro 控件简介 -避免输入焦点被虚拟键盘遮挡》请查看并下载控件代码。当然,这个控件针对于获取安卓设备信息及手机号不是必须的。
需要的权限
需要以下权限:
在高版本的安卓系统中,要想获取到设备信息,需要动态申请权限,在演示代码里已包括,代码可同时在高低安卓版本中使用。
代码说明
获取信息主要是两个部分:
TJBuild
这里面包括了较多的设备信息
BOARD 主板
BOOTLOADER 系统启动程序版本号
BRAND 系统定制商
CPU_ABI cpu指令集
CPU_ABI2 cpu指令集2
DEVICE 设备驱动名称
DISPLAY 显示屏参数,设备显示器的版本包(在系统设置中显示为版本号)和ID一样
FINGERPRINT 识别码(这个码不是唯一码)通常是一串参数的组合,没太大意义
HARDWARE 硬件名称
HOST设备主机地址
MANUFACTURER 硬件制造商
MODEL 版本即最终用户可见的名称
PRODUCT 整个产品的名称
RADIO 无线电固件版本:使用**getRadioVersion()**代替。
SERIAL 硬件序列号
TAGS 描述build的标签,如未签名,debug等等。
TIME 系统编译时间
TYPE 编译的类型
USER 固定的,没意义
示例代码(部分):
// 手机型号(MI XXX)
Memo1.Lines.Add('手机型号(MI XXX):' + JStringToString(TJBuild.JavaClass.MODEL));
// 设备基板名称
Memo1.Lines.Add('设备基板名称:' + JStringToString(TJBuild.JavaClass.BOARD));
// 系统启动程序版本
Memo1.Lines.Add('系统启动程序版本:' + JStringToString
(TJBuild.JavaClass.BOOTLOADER));
// 系统定制商
Memo1.Lines.Add('设备品牌:' + JStringToString(TJBuild.JavaClass.BRAND));
// cpu指令集
Memo1.Lines.Add('cpu指令集:' + JStringToString(TJBuild.JavaClass.CPU_ABI));
// cpu指令集2
Memo1.Lines.Add('cpu指令集2:' + JStringToString(TJBuild.JavaClass.CPU_ABI2));
// 设备驱动名称
Memo1.Lines.Add('设备驱动名称:' + JStringToString(TJBuild.JavaClass.DEVICE));
// 设备显示的版本包(在系统设置中显示为版本号)和ID一样
Memo1.Lines.Add('显示屏参数:' + JStringToString(TJBuild.JavaClass.DISPLAY));
// 设备制造商
Memo1.Lines.Add('设备制造商:' + JStringToString(TJBuild.JavaClass.MANUFACTURER));
// 无线电固件版本
Memo1.Lines.Add('无线电固件版本:' + JStringToString
(TJBuild.JavaClass.getRadioVersion));
// 设备的唯一标识。由设备的多个信息拼接合成。 注意,这个码不是唯一 码
Memo1.Lines.Add('硬件识别码(这个码不是唯一 码):' +
JStringToString(TJBuild.JavaClass.FINGERPRINT));
TelephonyManager
这部分包括了手机信息如卡槽信息、手机卡信息、运营商信息、网络信息等等,演示里也只列了一部分主要内容。
示例代码(部分):
TelephonyServiceNative := TAndroidHelper.Context.getSystemService
(TJContext.JavaClass.TELEPHONY_SERVICE);
if Assigned(TelephonyServiceNative) then
begin
Memo1.Lines.Add('======================');
try
TelephonyManager := TJTelephonyManager.Wrap
((TelephonyServiceNative as ILocalObject).GetObjectID);
// 手机卡槽数
vPhoneCount := TelephonyManager.getPhoneCount;
Memo1.Lines.Add('卡槽数:' + vPhoneCount.ToString);
// 插卡数
vSubscriptionManager := TJSubscriptionManager.JavaClass.from
(TAndroidHelper.Context);
vSubManagerCoun :=
vSubscriptionManager.getActiveSubscriptionInfoCount();
Memo1.Lines.Add('插卡数:' + vSubManagerCoun.ToString);
// 设备ID
Memo1.Lines.Add('DeviceId_1:' + JStringToString
(TelephonyManager.getDeviceId(0)));
if vPhoneCount > 1 then
Memo1.Lines.Add('DeviceId_2:' +
JStringToString(TelephonyManager.getDeviceId(1)));
// 硬件Imei
Memo1.Lines.Add('Imei_1:' + JStringToString
(TelephonyManager.getImei(0)));
if vPhoneCount > 1 then
Memo1.Lines.Add('Imei_2:' + JStringToString
(TelephonyManager.getImei(1)));
// 硬件Meid
try
Memo1.Lines.Add('Meid_1:' + JStringToString
(TelephonyManager.getMeid(0)));
except
on E: Exception do
end;
try
if vPhoneCount > 1 then
Memo1.Lines.Add('Meid_2:' + JStringToString
(TelephonyManager.getMeid(1)));
except
on E: Exception do
end;
// SubscriberId
Memo1.Lines.Add('SubscriberId(IMSI号):' +
JStringToString(TelephonyManager.getSubscriberId));
// Line1Number
Memo1.Lines.Add('Line1Number:' + JStringToString
(TelephonyManager.getLine1Number));
//分别取各卡槽信息
for I := 0 to vSubManagerCoun-1 do
begin
vSubscriptionInfo:=vSubscriptionManager.getActiveSubscriptionInfo(I+1);
Memo1.Lines.Add(I.ToString+'手机号: ' + JStringToString
(vSubscriptionInfo.getNumber));
Memo1.Lines.Add(I.ToString+'使用卡槽: ' + (vSubscriptionInfo.getSimSlotIndex+1).ToString);
Memo1.Lines.Add(I.ToString+'运营商: ' + JCharSequenceToStr
(vSubscriptionInfo.getCarrierName));
end;
except
end;
end;
获取信息展示
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/tanqth/article/details/104779089
获取信息展示
相关文章导读
《Delphi D10.3 LayoutsPro 控件简介 -避免输入焦点被虚拟键盘遮挡》
《Delphi安卓APP获取手机信息》源码下载地址