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

swish

Moderater
Staff member
Moderater
#1
[i=s] 本帖最后由 swish 于 2015-5-19 10:32 编辑 [/i]

转载自QDAC官网网站,文章发现问题可能随时更新,最新版本请访问:
You do not have permission to view link Log in or register now.

TelephonyManager 是 Android 中访问电话功能的一个重要对象,我们通过它可以读取到本机的电话号码。首先我们声明一个函数返回一个 JTelephonyManager 实例:
Code:
uses FMX.Platform.Android, Androidapi.JNI.Telephony;
...
function TelephonyManager: JTelephonyManager;
var
  TelephonyServiceNative: JObject;
begin
  TelephonyServiceNative := SharedActivityContext.getSystemService
    (TJContext.JavaClass.TELEPHONY_SERVICE);
  if TelephonyServiceNative <> nil then
    Result := TJTelephonyManager.Wrap((TelephonyServiceNative as ILocalObject)
      .GetObjectID)
  else
    Result := nil;
end;
接下来就简单了:
Code:
var
  AMgr:JTelephonyManager;
begin
AMgr:=TelephonyManager;
if Assigned(AMgr) then
  eduname.Text:=JStringToString(AMgr.getLine1Number);
end;
【注】
需要的权限:ReadPhoneState 需要设置为 True。
【提示】
手机好象没听说那款支持SIM卡热插拨,所以,可以在第一次调用时将其保存到全局变量,以便使用。
Code:
function PhoneNum: String;
{$J+}
const
  _PhoneNum: String='';
{$J-}
begin
if Length(_PhoneNum) = 0 then
    _PhoneNum := JStringToString(TelephonyManager.getLine1Number);
Result := _PhoneNum;
end;
这样子,每次就只第一次调用时创建对象来获取电话号码,以后就直接读取缓存的值,从而提高效率。
 
Last edited by a moderator: