{ ********************************************************************* * * Autor: Efimov A.A. * E-mail: infocean@gmail.com * GitHub: https://github.com/AndrewEfimov * Description: Getting information about connecting. * Requirements: You need permission "ACCESS_NETWORK_STATE" in the manifest. * Platform: only Android (tested on API16+) * IDE: Delphi 10.1 Berlin + * ******************************************************************** } unit ActiveNetworkInfo.Android; interface uses Androidapi.JNI.Net, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os; type TActiveNetworkInfo = class private class var FJConnectivityManager: JConnectivityManager; class constructor Create; public /// Check permission "android.permission.ACCESS_NETWORK_STATE" class function CheckPermission: Boolean; /// Returns details about the currently active default data network. class function GetInfo: JNetworkInfo; /// Indicates whether network connectivity exists and it is possible to establish connections and pass data. class function IsConnected: Boolean; /// Return a human-readable name describe the type of the network, for example "WIFI" or "MOBILE". class function GetTypeName: string; /// Is Wi-Fi connection? class function IsWifi: Boolean; /// Is Mobile connection? class function IsMobile: Boolean; end; implementation { TActiveNetworkInfo } class function TActiveNetworkInfo.CheckPermission: Boolean; const AccessNetworkStatePermission = 'android.permission.ACCESS_NETWORK_STATE'; var PackageName, Permission: JString; Context: JContext; PermissionGranted: Integer; begin PackageName := TAndroidHelper.Context.getPackageName; Context := TAndroidHelper.Context; Permission := StringToJString(AccessNetworkStatePermission); PermissionGranted := TJPackageManager.JavaClass.PERMISSION_GRANTED; if TJBuild_VERSION.JavaClass.SDK_INT < 23 then Result := Context.getPackageManager.CheckPermission(Permission, PackageName) = PermissionGranted else Result := Context.checkSelfPermission(Permission) = PermissionGranted; end; class constructor TActiveNetworkInfo.Create; begin FJConnectivityManager := nil; if CheckPermission then FJConnectivityManager := TJConnectivityManager.Wrap (TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE)); end; class function TActiveNetworkInfo.GetInfo: JNetworkInfo; var NetworkInfo: JNetworkInfo; begin Result := nil; if FJConnectivityManager <> nil then begin NetworkInfo := FJConnectivityManager.getActiveNetworkInfo(); if NetworkInfo <> nil then Result := NetworkInfo; end; end; class function TActiveNetworkInfo.IsConnected: Boolean; var NetworkInfo: JNetworkInfo; begin NetworkInfo := GetInfo; Result := (NetworkInfo <> nil) and NetworkInfo.IsConnected(); end; class function TActiveNetworkInfo.IsMobile: Boolean; var NetworkInfo: JNetworkInfo; begin NetworkInfo := GetInfo; Result := (NetworkInfo <> nil) and (NetworkInfo.getType() = TJConnectivityManager.JavaClass.TYPE_MOBILE); end; class function TActiveNetworkInfo.IsWifi: Boolean; var NetworkInfo: JNetworkInfo; begin NetworkInfo := GetInfo; Result := (NetworkInfo <> nil) and (NetworkInfo.getType() = TJConnectivityManager.JavaClass.TYPE_WIFI); end; class function TActiveNetworkInfo.GetTypeName: string; const ResultNone = 'NONE'; var NetworkInfo: JNetworkInfo; begin NetworkInfo := GetInfo; if NetworkInfo <> nil then Result := JStringToString(NetworkInfo.GetTypeName()) else Result := ResultNone end; end.