如何检查networking在Android和iOS上是否可用(Delphi XE5)

  • 如何检查Android和iOS上的networking是否可用?

尝试这个:

 unit Network; interface function IsConnected: Boolean; function IsWiFiConnected: Boolean; function IsMobileConnected: Boolean; implementation uses System.SysUtils, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, FMX.Helpers.Android, Androidapi.Helpers, Misc; type JConnectivityManager = interface; JNetworkInfo = interface; JNetworkInfoClass = interface(JObjectClass) ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}'] end; [JavaSignature('android/net/NetworkInfo')] JNetworkInfo = interface(JObject) ['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}'] {Methods} function isAvailable: Boolean; cdecl; function isConnected: Boolean; cdecl; function isConnectedOrConnecting: Boolean; cdecl; end; TJNetworkInfo = class(TJavaGenericImport<JNetworkInfoClass, JNetworkInfo>) end; JConnectivityManagerClass = interface(JObjectClass) ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}'] {Property methods} function _GetTYPE_WIFI: Integer; cdecl; function _GetTYPE_WIMAX: Integer; cdecl; function _GetTYPE_MOBILE: Integer; cdecl; {Properties} property TYPE_WIFI: Integer read _GetTYPE_WIFI; property TYPE_WIMAX: Integer read _GetTYPE_WIMAX; property TYPE_MOBILE: Integer read _GetTYPE_MOBILE; end; [JavaSignature('android/net/ConnectivityManager')] JConnectivityManager = interface(JObject) ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}'] {Methods} function getActiveNetworkInfo: JNetworkInfo; cdecl; function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl; end; TJConnectivityManager = class(TJavaGenericImport<JConnectivityManagerClass, JConnectivityManager>) end; function GetConnectivityManager: JConnectivityManager; var ConnectivityServiceNative: JObject; begin ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); if not Assigned(ConnectivityServiceNative) then raise Exception.Create('Could not locate Connectivity Service'); Result := TJConnectivityManager.Wrap( (ConnectivityServiceNative as ILocalObject).GetObjectID); if not Assigned(Result) then raise Exception.Create('Could not access Connectivity Manager'); end; function IsConnected: Boolean; var ConnectivityManager: JConnectivityManager; ActiveNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; ActiveNetwork := ConnectivityManager.getActiveNetworkInfo; Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected; end; function IsWiFiConnected: Boolean; var ConnectivityManager: JConnectivityManager; WiFiNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI); Result := WiFiNetwork.isConnected; end; function IsMobileConnected: Boolean; var ConnectivityManager: JConnectivityManager; MobileNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; MobileNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_MOBILE); Result := MobileNetwork.isConnected; end; end. 

非常感谢解决scheme。 因为它开始在delphi柏林工作,我redid模块代码。 我希望这是有用的。

在RAD 10.1上可以完全使用Androidapi.JNI.Net.pas模块。 但是对于这个研究来说,在一个单独的模块中提出function是有用的。

 unit Androidapi.JNI.Network; interface function IsConnected: Boolean; function IsWiFiConnected: Boolean; function IsMobileConnected: Boolean; implementation uses System.SysUtils, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, FMX.Helpers.Android, Androidapi.Helpers; // type // JConnectivityManager = interface; // JNetworkInfo = interface; // // JNetworkInfoClass = interface(JObjectClass) // ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}'] // end; // // [JavaSignature('android/net/NetworkInfo')] // JNetworkInfo = interface(JObject) // ['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}'] // { Methods } // function isAvailable: Boolean; cdecl; // function IsConnected: Boolean; cdecl; // function isConnectedOrConnecting: Boolean; cdecl; // end; // TJNetworkInfo = class(TJavaGenericImport<JNetworkInfoClass, JNetworkInfo>) // end; // // JConnectivityManagerClass = interface(JObjectClass) // ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}'] // { Property methods } // function _GetTYPE_WIFI: Integer; cdecl; // function _GetTYPE_WIMAX: Integer; cdecl; // function _GetTYPE_MOBILE: Integer; cdecl; // { Properties } // property TYPE_WIFI: Integer read _GetTYPE_WIFI; // property TYPE_WIMAX: Integer read _GetTYPE_WIMAX; // property TYPE_MOBILE: Integer read _GetTYPE_MOBILE; // end; // // [JavaSignature('android/net/ConnectivityManager')] // JConnectivityManager = interface(JObject) // ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}'] // { Methods } // function getActiveNetworkInfo: JNetworkInfo; cdecl; // function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl; // end; // TJConnectivityManager = class(TJavaGenericImport<JConnectivityManagerClass, JConnectivityManager>) // end; function GetConnectivityManager: JConnectivityManager; var ConnectivityServiceNative: JObject; begin ConnectivityServiceNative := TAndroidHelper.Context.getSystemService (TJContext.JavaClass.CONNECTIVITY_SERVICE); if not Assigned(ConnectivityServiceNative) then raise Exception.Create('Could not locate Connectivity Service'); Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID); if not Assigned(Result) then raise Exception.Create('Could not access Connectivity Manager'); end; function IsConnected: Boolean; var ConnectivityManager: JConnectivityManager; ActiveNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; ActiveNetwork := ConnectivityManager.getActiveNetworkInfo; Result := Assigned(ActiveNetwork) and ActiveNetwork.IsConnected; end; function IsWiFiConnected: Boolean; var ConnectivityManager: JConnectivityManager; WiFiNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI); Result := WiFiNetwork.IsConnected; end; function IsMobileConnected: Boolean; var ConnectivityManager: JConnectivityManager; MobileNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; MobileNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_MOBILE); Result := MobileNetwork.IsConnected; end; end. 

我现在没有源码目录,但是这应该能帮助你指出正确的方向。

我相信你将能够在delphi中重做下面的Android解决scheme: 检测 Android上是否有可用的Internet连接

编辑:这行复制该函数的第一行,只是不知道是什么types返回。 一旦你有这个function的其余部分应该是微不足道的:

SharedActivitiyContext.getSystemService(TJContext.JavaClass.ConnectivityService)

解决scheme在fmxexpress site.You通常使用IdTCPClient组件,并检查您是否可以连接到google.com