{ *********************************************************************
*
* 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.