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