首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Delphi FMX Android应用程序获取设备电话号码

Delphi FMX Android应用程序获取设备电话号码
EN

Stack Overflow用户
提问于 2016-09-29 16:35:02
回答 1查看 4.3K关注 0票数 0

我需要获取运行我的应用程序的设备的电话号码。如果设备上有两张SIM卡,最好同时获得两个号码,或者如果没有插入SIM卡(平板设备),则可以检测到这一点。

我找到了一些JAVA代码,但是我不知道如何把它翻译成Delphi

代码语言:javascript
运行
复制
TelephonyManager phneMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String phneNmbr = phneMgr.getLine1Number();

我试着写一些东西,但它不起作用...

代码语言:javascript
运行
复制
USES  Androidapi.Helpers,  Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony;

procedure TForm1.Button1Click(Sender: TObject);
var
  num: JString;
  tman: Androidapi.JNI.Telephony.JTelephonyManager;
begin
  tman:=TJtelephonyManager.Create;
  num := tman.getLine1Number;
  edit1.Text:=Jstringtostring(num);
end;
EN

回答 1

Stack Overflow用户

发布于 2016-09-29 21:29:45

根据其他系统服务的经验,类似这样的东西应该可以做到这一点。这就解释了您所建议的是可行的Java代码。

当我稍后有一份Delphi的副本时,我将对其进行编辑,使其正确编译(如果有任何问题),但这大致就是所需的。

请注意,快速浏览the telephony manager documentation并不容易说出如何获得第二个SIM卡的电话号码,但它确实翻译了您试图翻译的内容。

代码语言:javascript
运行
复制
uses
  System.SysUtils,
  Androidapi.Helpers,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Telephony;

function DeviceTelephoneNumber: string;
var
  TelephonyManagerObj: JObject;
  TelephonyManager: JTelephonyManager;
begin
  TelephonyManagerObj:= TAndroidHelper.Context.getSystemService(
    TJContext.JavaClass.TELEPHONY_SERVICE);
  if TelephonyManagerObj <> nil then
  begin
    TelephonyManager := TJTelephonyManager.Wrap(TelephonyManagerObj);
    if TelephonyManager <> nil then
      Result := JStringToString(TelephonyManager.getLine1Number);
  end;
end;

这段代码也是可能的,它可以在Android5.1和更高版本中工作。

代码语言:javascript
运行
复制
function DeviceTelephoneNumbers: TArray<string>;
var
  SubscriptionManager: JSubscriptionManager;
  I, SubscriptionInfoCount: Integer;
  SubscriptionInfoList: JList;
  SubscriptionInfo: JSubscriptionInfo;
begin
  // Subscription manager is only available in Android 5.1 and later
  if TOSVersion.Check(5, 1) then
  begin
    SubscriptionManager := TJSubscriptionManager.JavaClass.from(
      TAndroidHelper.Context);
    SubscriptionInfoCount := SubscriptionManager.getActiveSubscriptionInfoCount;
    SubscriptionInfoList := SubscriptionManager.getActiveSubscriptionInfoList;
    SetLength(Result, SubscriptionInfoCount);
    for I := 0 to Pred(SubscriptionInfoCount) do
    begin
      SubscriptionInfo := TJSubscriptionInfo.Wrap(SubscriptionInfoList.get(I));
      if SubscriptionInfo <> nil then
        Result[I] := JStringToString(SubscriptionInfo.getNumber);
    end;
  end
  else
  begin
    // If running on older OS, use older API
    SetLength(Result, SubscriptionInfoCount);
    Result[0] := DeviceTelephoneNumber
  end;
end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39765326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档