[FMX]-读取本机电话号码

TelephonyManager 是 Android 中访问电话功能的一个重要对象,我们通过它可以读取到本机的电话号码。首先我们声明一个函数返回一个 JTelephonyManager 实例:

uses FMX.Platform.Android,Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony,Androidapi.JNIBridge,Androidapi.JNI.GraphicsContentViewText,Androidapi.Helpers;
...
function TelephonyManager: JTelephonyManager;
var
  TelephonyServiceNative: JObject;
begin
  TelephonyServiceNative := TAndroidHelper.Context.getSystemService
    (TJContext.JavaClass.TELEPHONY_SERVICE);
  if TelephonyServiceNative <> nil then
    Result := TJTelephonyManager.Wrap((TelephonyServiceNative as ILocalObject)
      .GetObjectID)
  else
    Result := nil;
end;

接下来就简单了:

var
  AMgr:JTelephonyManager;
begin
AMgr:=TelephonyManager;
if Assigned(AMgr) then
  eduname.Text:=JStringToString(AMgr.getLine1Number);
end;

需要的权限:ReadPhoneState 需要设置为 True。

手机好象没听说那款支持SIM卡热插拨,所以,可以在第一次调用时将其保存到全局变量,以便使用,我们提供一个额外的封装:

function PhoneNum: String;
{$J+}
const
  _PhoneNum: String='';
{$J-}
begin
  if Length(_PhoneNum) = 0 then
    _PhoneNum:= JStringToString(TelephonyManager.getLine1Number);
  Result := _PhoneNum;
end;

这样子,每次就只第一次调用时创建对象来获取电话号码,以后就直接读取缓存的值,从而提高效率。

分享到: