• Android实例-监测网络状态及一些事件(XE8+小米2)


    结果:

    1.网络连接:是指现在可不可以上网(你非要问我什么是网,我会K你呀的)。

    2.WIFI网络:是指现在可以上网,用的是不是WIFI网络(如果你打开了WIFI那它会显示正在使用WIFI)。

    3.移动网络:是指现在可以上网,用的是不是移动网络(如果你打开了移动的数据流量它会显示移动网络)。

    PS:

    打开权限Project -> Options… -> Users permitions-> Access network state -> True。 

    第三方单元:

      1 unit Androidapi.JNI.Network;
      2 
      3 interface
      4 
      5 function IsConnected: Boolean;
      6 
      7 function IsWiFiConnected: Boolean;
      8 
      9 function IsMobileConnected: Boolean;
     10 
     11 implementation
     12 
     13 uses
     14   System.SysUtils,
     15   Androidapi.JNIBridge,
     16   Androidapi.JNI.GraphicsContentViewText,
     17   Androidapi.JNI.JavaTypes,
     18   FMX.Helpers.Android,
     19   Androidapi.Helpers;//需要引入
     20 
     21 type
     22   JConnectivityManager = interface;
     23   JNetworkInfo = interface;
     24 
     25   JNetworkInfoClass = interface(JObjectClass)
     26   ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}']
     27   end;
     28 
     29   [JavaSignature('android/net/NetworkInfo')]
     30   JNetworkInfo = interface(JObject)
     31   ['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}']
     32     {Methods}
     33     function isAvailable: Boolean; cdecl;
     34     function isConnected: Boolean; cdecl;
     35     function isConnectedOrConnecting: Boolean; cdecl;
     36   end;
     37   TJNetworkInfo = class(TJavaGenericImport<JNetworkInfoClass, JNetworkInfo>) end;
     38 
     39   JConnectivityManagerClass = interface(JObjectClass)
     40   ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}']
     41     {Property methods}
     42     function _GetTYPE_WIFI: Integer; cdecl;
     43     function _GetTYPE_WIMAX: Integer; cdecl;
     44     function _GetTYPE_MOBILE: Integer; cdecl;
     45     {Properties}
     46     property TYPE_WIFI: Integer read _GetTYPE_WIFI;
     47     property TYPE_WIMAX: Integer read _GetTYPE_WIMAX;
     48     property TYPE_MOBILE: Integer read _GetTYPE_MOBILE;
     49   end;
     50 
     51   [JavaSignature('android/net/ConnectivityManager')]
     52   JConnectivityManager = interface(JObject)
     53   ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}']
     54     {Methods}
     55     function getActiveNetworkInfo: JNetworkInfo; cdecl;
     56     function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl;
     57   end;
     58   TJConnectivityManager = class(TJavaGenericImport<JConnectivityManagerClass, JConnectivityManager>) end;
     59 
     60 function GetConnectivityManager: JConnectivityManager;
     61 var
     62   ConnectivityServiceNative: JObject;
     63 begin
     64   ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);
     65   if not Assigned(ConnectivityServiceNative) then
     66     raise Exception.Create('Could not locate Connectivity Service');
     67   Result := TJConnectivityManager.Wrap(
     68     (ConnectivityServiceNative as ILocalObject).GetObjectID);
     69   if not Assigned(Result) then
     70     raise Exception.Create('Could not access Connectivity Manager');
     71 end;
     72 
     73 function IsConnected: Boolean;
     74 var
     75   ConnectivityManager: JConnectivityManager;
     76   ActiveNetwork: JNetworkInfo;
     77 begin
     78   ConnectivityManager := GetConnectivityManager;
     79   ActiveNetwork := ConnectivityManager.getActiveNetworkInfo;
     80   Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected;
     81 end;
     82 
     83 function IsWiFiConnected: Boolean;
     84 var
     85   ConnectivityManager: JConnectivityManager;
     86   WiFiNetwork: JNetworkInfo;
     87 begin
     88   ConnectivityManager := GetConnectivityManager;
     89   WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI);
     90   Result := WiFiNetwork.isConnected;
     91 end;
     92 
     93 function IsMobileConnected: Boolean;
     94 var
     95   ConnectivityManager: JConnectivityManager;
     96   MobileNetwork: JNetworkInfo;
     97 begin
     98   ConnectivityManager := GetConnectivityManager;
     99   MobileNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_MOBILE);
    100   Result := MobileNetwork.isConnected;
    101 end;
    102 
    103 end.

    实例代码:

     1 unit Unit1;
     2 
     3 interface
     4 
     5 uses
     6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
     7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
     8   FMX.Controls.Presentation,
     9   Androidapi.JNI.Network, //需要引入
    10   FMX.Platform, //需要引入
    11   FMX.ScrollBox, FMX.Memo;
    12 
    13 type
    14   TForm1 = class(TForm)
    15     Button1: TButton;
    16     Label1: TLabel;
    17     Button2: TButton;
    18     Button3: TButton;
    19     Memo1: TMemo;
    20     procedure Button1Click(Sender: TObject);
    21     procedure FormCreate(Sender: TObject);
    22     procedure Button2Click(Sender: TObject);
    23     procedure Button3Click(Sender: TObject);
    24   private
    25     { Private declarations }
    26   public
    27     function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
    28     procedure Log(s: string);
    29     { Public declarations }
    30   end;
    31 
    32 var
    33   Form1: TForm1;
    34 
    35 implementation
    36 
    37 {$R *.fmx}
    38 {$R *.NmXhdpiPh.fmx ANDROID}
    39 
    40 procedure TForm1.Button1Click(Sender: TObject);
    41 begin
    42   if IsConnected then
    43     Label1.Text := '网络连接正常!'
    44   else
    45     Label1.Text := '没有网络连接!';
    46 end;
    47 
    48 procedure TForm1.Button2Click(Sender: TObject);
    49 begin
    50   if IsWiFiConnected then
    51     Label1.Text := 'WiFi 连接正常!'
    52   else
    53     Label1.Text := 'WiFi 连接断开!';
    54 end;
    55 
    56 procedure TForm1.Button3Click(Sender: TObject);
    57 begin
    58   if IsMobileConnected then
    59     Label1.Text := '移动网络连接正常!'
    60   else
    61     Label1.Text := '移动网络连接断开!';
    62 end;
    63 
    64 procedure TForm1.FormCreate(Sender: TObject);
    65 var
    66   aFMXApplicationEventService: IFMXApplicationEventService;
    67 begin
    68   if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService)) then
    69     aFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent)
    70   else
    71     Log('Application Event Service is not supported.');
    72 end;
    73 
    74 //监测函数,此处仅仅调用 log 记录一下事件名称,你可以替换为你自己的函数
    75 function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent;
    76   AContext: TObject): Boolean;
    77 begin
    78   case AAppEvent of
    79     TApplicationEvent.aeFinishedLaunching: Log('Finished Launching');
    80     TApplicationEvent.aeBecameActive: Log('Became Active');
    81     TApplicationEvent.aeWillBecomeInactive: Log('Will Become Inactive');
    82     TApplicationEvent.aeEnteredBackground: Log('Entered Background');
    83     TApplicationEvent.aeWillBecomeForeground: Log('Will Become Foreground');
    84     TApplicationEvent.aeWillTerminate: Log('Will Terminate');
    85     TApplicationEvent.aeLowMemory: Log('Low Memory');
    86     TApplicationEvent.aeTimeChange: Log('Time Change');
    87     TApplicationEvent.aeOpenURL: Log('Open URL');
    88   end;
    89   Result := True;
    90 end;
    91 
    92 procedure TForm1.Log(s: string);
    93 begin
    94   Memo1.Lines.Add(TimeToStr(Now) + ': ' + s);
    95 end;
    96 
    97 end.
  • 相关阅读:
    【转】浅谈MVC与三层架构
    【转】小结登录的几种交互方式
    【转】 App架构设计经验谈:接口的设计
    【转】JS编码解码、C#编码解码
    jQuery 判断是否包含某个属性
    jQuery on()方法
    常用正则表达式大全
    Fiddler 抓取手机APP数据包
    [Asp.net]通过uploadify将文件上传到B服务器的共享文件夹中
    ★电车难题的n个坑爹变种
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/4743112.html
Copyright © 2020-2023  润新知