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

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

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

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

第三方单元:

  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.
时间: 2024-11-08 01:13:46

Android实例-监测网络状态及一些事件(XE8+小米2)的相关文章

Android实例-MediaPlayer播放音乐和视频(XE8+小米2)

结果: 1.播放视频需要手动放入MediaPlayerControl1控件,设置MediaPlayerControl1.MediaPlayer := MediaPlayer1; 2.播放声音文件正常,但播放器视时发现,第一边正常第二边就报错了(哪位大神知道的,请M我哦,先谢谢了). 3.打包时需要打入MP3与MP4文件,路径为"assets\internal\". 实例代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 System.SysUtils,

Android实例-解决虚拟键盘遮挡问题(XE8+小米2)

结果: 1.可以自动向上移动,来防遮挡,但同时发现个问题,如果是按硬件返回没有问题,要是点输入法(QQ.百度输入法)上的隐藏就不行了. 2.点击Edit2后出现输入法,点输入法上的隐藏后, 再点Edit2输入法不再显示. 实例代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, 7 FMX.Types, F

Android实例-录音与回放(播放MP3)(XE8+小米2)

结果: 1.增加ActionList中的Action时,需要跳到Master界面,不能在Android4Phonel界面下. 2.如果不打开权限的话,会提示“该设备不支持停止录音操作”(Record audion改为True). 3.播放的效果是播放一次就停止了.不是循环的. 实例代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 System.SysUtils, System.Types, System.UITypes, System.Classes, Sys

Android实例-获取安卓手机WIFI信息(XE8+小米2)

结果: 1.必须打开Access wifi state权限,不打开权限会出图二的错误. 相关资料: http://blog.csdn.net/lyf_lyf/article/category/173576 实例代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, 7 FMX.Types, FMX.Contr

Android实例-解决启动黑屏问题(XE8+小米2)

结果: 1.在启动时马上出现图片界面,但在出现程序界面前会有黑屏,大约有0.2秒左右. 实现: 1.建立2个文件:loading.png和styles.xml: ①其中loading.png是启动时替代黑屏的图片. ②styles.xml是对背景图片的定义,其内容为: 1 <resources> 2 3 <!-- 4 Base application theme, dependent on API level. This theme is replaced 5 by AppBaseThe

Android实践--监测网络状态

Android 监测网络状态 我们在使用Android手机时候,一些APP需要网络环境才能运行,所以手机需要可用的网络,不管是2G.3G或者WIFI,甚至有一些比较耗流量的APP只能在WIFI的环境下运行,或者提供用户自行选择是否只能在WIFI环境下运行,作为用户貌似后者体验更好,那么作为开发者,我们仅仅需要几步就能给用户这种体验. ----------------------------------------------------------------------------------

Android实例-实现扫描二维码并生成二维码(XE8+小米5)

相关资料: 第三方资料太大没法写在博文上,请下载CSDN的程序包. 程序包下载: 过几天,刚上传的包,都没有办法显示. 注意事项: 如果只加了Lib,然没有改AndroidManifest.xml,App在呼叫BarCode时会ANR没反应.开始可能没有官方的classes.dex,但如果发现编译出错后,请再检查一下.TMessageManager须加System.Messaging单元. 使用DelphiXE7加入JavaLibrary后,呼叫Zxing相机1.新建一个DelphiXE工程,双

【Android】11.2 通过重写对应的方法保存和恢复实例的状态

分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 通过重写(也叫回调)对应的方法来管理Activity的生命周期,比如用户旋转屏幕时应用程序要能自动保存和恢复实例的状态,这对于开发一个健壮而又灵活的应用程序而言至关重要. 1.本节要点 一旦真正理解了Activity的生命周期,就可以轻松自如地通过C#代码去控制它了.这一节我们主要学习如何用Boundle存储简单类型的数据(比如int.double.string.bool.--等). 当一个Activity停止

保存和恢复 Android Fragment 的状态

经过几年在 Android 应用开发中应用 Fragment 的努力之后,我必须要说尽管Fragment的概念非常优秀,但是它也同时带来了一堆问题.当我们处理实例的状态保存时就需要特别一件一件地修护好. 首先,尽管已经有了一个类似 Activity 中的 onSaveInstanceState 方法,但是它显然不能覆盖所有情况.换种说法就是,你不能仅仅依赖于 onSaveInstanceState 方法来保存/恢复视图的状态.这里有一些案例研究. 案例1:只有一个 Fragment 在栈中时,旋