ActiveNetworkInfo.Android.pas 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. { *********************************************************************
  2. *
  3. * Autor: Efimov A.A.
  4. * E-mail: infocean@gmail.com
  5. * GitHub: https://github.com/AndrewEfimov
  6. * Description: Getting information about connecting.
  7. * Requirements: You need permission "ACCESS_NETWORK_STATE" in the manifest.
  8. * Platform: only Android (tested on API16+)
  9. * IDE: Delphi 10.1 Berlin +
  10. *
  11. ******************************************************************** }
  12. unit ActiveNetworkInfo.Android;
  13. interface
  14. uses
  15. Androidapi.JNI.Net, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  16. Androidapi.JNI.Os;
  17. type
  18. TActiveNetworkInfo = class
  19. private
  20. class var FJConnectivityManager: JConnectivityManager;
  21. class constructor Create;
  22. public
  23. /// <summary>Check permission "android.permission.ACCESS_NETWORK_STATE"</summary>
  24. class function CheckPermission: Boolean;
  25. /// <summary>Returns details about the currently active default data network.</summary>
  26. class function GetInfo: JNetworkInfo;
  27. /// <summary>Indicates whether network connectivity exists and it is possible to establish connections and pass data.</summary>
  28. class function IsConnected: Boolean;
  29. /// <summary>Return a human-readable name describe the type of the network, for example "WIFI" or "MOBILE".</summary>
  30. class function GetTypeName: string;
  31. /// <summary>Is Wi-Fi connection?</summary>
  32. class function IsWifi: Boolean;
  33. /// <summary>Is Mobile connection?</summary>
  34. class function IsMobile: Boolean;
  35. end;
  36. implementation
  37. { TActiveNetworkInfo }
  38. class function TActiveNetworkInfo.CheckPermission: Boolean;
  39. const
  40. AccessNetworkStatePermission = 'android.permission.ACCESS_NETWORK_STATE';
  41. var
  42. PackageName, Permission: JString;
  43. Context: JContext;
  44. PermissionGranted: Integer;
  45. begin
  46. PackageName := TAndroidHelper.Context.getPackageName;
  47. Context := TAndroidHelper.Context;
  48. Permission := StringToJString(AccessNetworkStatePermission);
  49. PermissionGranted := TJPackageManager.JavaClass.PERMISSION_GRANTED;
  50. if TJBuild_VERSION.JavaClass.SDK_INT < 23 then
  51. Result := Context.getPackageManager.CheckPermission(Permission, PackageName) = PermissionGranted
  52. else
  53. Result := Context.checkSelfPermission(Permission) = PermissionGranted;
  54. end;
  55. class constructor TActiveNetworkInfo.Create;
  56. begin
  57. FJConnectivityManager := nil;
  58. if CheckPermission then
  59. FJConnectivityManager := TJConnectivityManager.Wrap
  60. (TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE));
  61. end;
  62. class function TActiveNetworkInfo.GetInfo: JNetworkInfo;
  63. var
  64. NetworkInfo: JNetworkInfo;
  65. begin
  66. Result := nil;
  67. if FJConnectivityManager <> nil then
  68. begin
  69. NetworkInfo := FJConnectivityManager.getActiveNetworkInfo();
  70. if NetworkInfo <> nil then
  71. Result := NetworkInfo;
  72. end;
  73. end;
  74. class function TActiveNetworkInfo.IsConnected: Boolean;
  75. var
  76. NetworkInfo: JNetworkInfo;
  77. begin
  78. NetworkInfo := GetInfo;
  79. Result := (NetworkInfo <> nil) and NetworkInfo.IsConnected();
  80. end;
  81. class function TActiveNetworkInfo.IsMobile: Boolean;
  82. var
  83. NetworkInfo: JNetworkInfo;
  84. begin
  85. NetworkInfo := GetInfo;
  86. Result := (NetworkInfo <> nil) and (NetworkInfo.getType() = TJConnectivityManager.JavaClass.TYPE_MOBILE);
  87. end;
  88. class function TActiveNetworkInfo.IsWifi: Boolean;
  89. var
  90. NetworkInfo: JNetworkInfo;
  91. begin
  92. NetworkInfo := GetInfo;
  93. Result := (NetworkInfo <> nil) and (NetworkInfo.getType() = TJConnectivityManager.JavaClass.TYPE_WIFI);
  94. end;
  95. class function TActiveNetworkInfo.GetTypeName: string;
  96. const
  97. ResultNone = 'NONE';
  98. var
  99. NetworkInfo: JNetworkInfo;
  100. begin
  101. NetworkInfo := GetInfo;
  102. if NetworkInfo <> nil then
  103. Result := JStringToString(NetworkInfo.GetTypeName())
  104. else
  105. Result := ResultNone
  106. end;
  107. end.