123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- { *********************************************************************
- *
- * 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
- /// <summary>Check permission "android.permission.ACCESS_NETWORK_STATE"</summary>
- class function CheckPermission: Boolean;
- /// <summary>Returns details about the currently active default data network.</summary>
- class function GetInfo: JNetworkInfo;
- /// <summary>Indicates whether network connectivity exists and it is possible to establish connections and pass data.</summary>
- class function IsConnected: Boolean;
- /// <summary>Return a human-readable name describe the type of the network, for example "WIFI" or "MOBILE".</summary>
- class function GetTypeName: string;
- /// <summary>Is Wi-Fi connection?</summary>
- class function IsWifi: Boolean;
- /// <summary>Is Mobile connection?</summary>
- 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.
|