Delphi 12.1安卓APP开发中获取硬件信息及手机号

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获取手机信息》源码下载地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年【上海市安全员C证】考试题库及上海市安全员C证报名考试

题库来源:安全生产模拟考试一点通公众号小程序 2024年【上海市安全员C证】考试题库及上海市安全员C证报名考试,包含上海市安全员C证考试题库答案和解析及上海市安全员C证报名考试练习。安全生产模拟考试一点通结合国家上海市安全员C证考试最新大纲及上海…

Vue 3 + Element Plus 封装单列控制编辑的可编辑表格组件

在Web应用开发中,经常需要提供表格数据的编辑功能。本文将介绍如何使用Vue 3结合Element Plus库来实现一个支持单列控制编辑功能的表格,并通过封装组件的形式提高代码的复用性。通过本教程,你将学会如何构建一个具备单列控制编辑功能的表格组…

Vue2中使用ant-design的tab组件让他一行充满

使用tabs组件默认样式这样 想改成水平居中铺满如下: 需要改下css样式 /deep/ .ant-tabs-nav {width: 100%;& > div {width: 100%;display: flex;align-items: center;}.ant-tabs-tab {flex: 1;text-align: center;}}

为Hexo添加说说功能—Artitalk

文章目录 Artitalk部署LeanCloud配置Hexo Artitalk 基于 LeanCloud 实现的可实时发布说说/微语的 js Artitalk.js官方文档 官方文档其实讲述的很详细了,在此记录一下,方便以后维护。 另外欢迎来我的博客 火柴人儿的小站,本博客基于雨云服务器…

15.2 JDBC数据库编程2

15.2.1 数据库访问步骤 使用JDBC API连接和访问数据库,一般分为以下5个步骤: (1) 加载驱动程序 (2) 建立连接对象 (3) 创建语句对象 (4) 获得SQL语句的执行结果 (5) 关闭建立的对象,释放资源 下面将详细描述这些步骤 15.2.2 加载驱动程序 要使…

山东省行政执法证照片要求及图像处理方法

在山东省,行政执法证是执法人员身份的重要标识,其照片的规范性对于证件的有效性至关重要。本文将详细介绍山东省行政执法证照片的要求,并提供使用手机相机拍照的实用方法,以确保照片符合标准。 一、山东省行政人员执法证照片拍摄要…

百度静态资源瓦片nginx直接显示完整案例

案例地址:https://download.csdn.net/download/jinhuding/89733763 访问显示效果:(根据瓦片地址直接显示) http://172.16.39.203:8099/tiles/

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant&am…

视频号黄金时间

现在刷视频的人越来越多,看视频号的也很多,那我们应该怎样发视频号呢?发朋友圈都有黄金时间,那视频号有吗? 答案是:有的。 不同时间段发什么内容的视频,可以引流更多精准的流量,可…

【JAVA入门】Day34 - Stream流

【JAVA入门】Day34 - Stream流 文章目录 【JAVA入门】Day34 - Stream流一、Stream 流的作用和使用步骤1.Stream流的创建,数据的添加2. Stream流的中间方法3. Stream流的终结方法 Stream 流有什么作用?我们看一个例子: 【练习】需求&#xff…

记录一下linux安装nginx,也是很简单了啦

1、下载nginx 官网下载nginx:http://nginx.org/,这里很简单,下载自己想要的版本就行,这里不罗嗦 1、进入home目录,建一个文件夹nginx rootroot ~]# cd /home rootroot home]# mkdir nginx rootroot home]# cd /nginx2…

Java语言程序设计——篇十三(1)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

系统架构师考试学习笔记第四篇——架构设计实践知识(21)安全架构设计理论与实践

本章考点: 第21课时主要学习信息系统中安全架构设计的理论和工作中的实践。根据考试大纲,本课时知识点会涉及案例分析题和论文题(各占25分),而在历年考试中,综合知识选择题目中也有过诸多考查。本课时内容侧重于知识点记忆;,按照以往的出题规律,安全架构设计基础知识…

SOMEIP_ETS_100: SD_ClientServiceActivate_no_FindServices_in_Main_Phase

测试目的: 确保客户端服务模式仅在启动阶段发送FindService消息,在主阶段不发送。 描述 本测试用例旨在验证DUT在客户端服务模式下的行为,即它应当在启动阶段发送FindService消息,并在进入主阶段后停止发送。 测试拓扑&#x…

【触想智能】工业一体机在物流领域上的四大应用分析

随着物流业的快速发展,工业一体机在物流领域上的应用越来越普遍。工业一体机是一种高级智能设备,是多种技术的综合应用,包括机械、电子、计算机、通讯等。 在物流行业中,工业一体机可以发挥其先进的技术和功能,提高物流…

基于单片机的仔猪喂饲系统设计

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

【网络安全 | 渗透工具】Cencys+Shodan使用教程

原创文章,不得转载。 文章目录 Cencys准备语法全文搜索字段和值搜索通配符搜索布尔逻辑搜索嵌套搜索时间相关搜索范围搜索双引号 (")转义序列和保留字符Censys 搜索语言中的主机查询查看主机搜索结果Censys 搜索语言中的证书查询查看证书搜索结果生成报告其余Shodan准备使…

【Java数据结构】泛型的进阶部分(泛型通配符)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

MT6895(天玑8100)处理器规格参数_MTK联发科平台方案

MT6895平台 采用台积电5nm工艺,与天玑 8000 相比性能提升 20% ,搭载4 个 2.85GHz A78 核心 4 个 2.0GHz A55 核心,CPU能效比上一代提高 25% 。GPU 采用了第三代的Valhall Arm Mali-G610 MC6架构,拥有6核心,搭配天玑81…

逻辑函数的公式化简法

目录 逻辑函数的公式化简法 并项法 吸收法 消去法 配项法 习题1 习题2 逻辑函数的公式化简法 并项法 B或B非结果为1,这样可以消去B,将两项合并为一项。 用于消去变量。 吸收法 1或上一个变量结果为1,1与上A变量结果为A变量。 1或任何…