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

Discussion in '移动开发 | Mobile Develop' started by swish, May 19, 2015.

  1. swish

    swish Staff Member Moderater

    Apr 13, 2015
    [i=s] 本帖最后由 swish 于 2015-5-19 10:32 编辑 [/i]

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

    l_wming Member

    May 19, 2015
    搞了Android的还有IOS的也有需要哦
     
  3. swish

    swish Staff Member Moderater

    Apr 13, 2015
    应该差不多,不过IOS我没有苹果的手机,所以没法测试
     
  4. da

    daosen2008 Member

    Nov 9, 2015
    双卡机器无法获取,单卡的能正查读到,安卓6.0, XE10.1