下面提供的函数是我根据搜索到的资料编写的一个函数,注意 Delphi 自带的 iOSApi.CoreTelephony 单元中,CTTelphonyNetworkInfo 缺少了一个函数,所以需要我们将其复制到我们工程目录下,加入该函数:
1
2
3
4
5
6
|
CTTelephonyNetworkInfo
=
interface
(
NSObject
)
[
'{F75CE940-A78E-4C64-812E-0576386B582D}'
]
function
subscriberCellularProvider
:
CTCarrier
;
cdecl
;
procedure
setSubscriberCellularProviderDidUpdateNotifier
(
Handler
:
TCellularProviderNotifier
)
;
cdecl
;
function
currentRadioAccessTechnology
:
NSString
;
cdecl
;
//<--加入这一行
end
;
|
至于剩下的就好说了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
function
GetNetType
:
TNetType
;
{
$
IFDEF
ANDROID
}
function
AndroidNetType
:
TNetType
;
var
AMgr
:
JConnectivityManager
;
ANetwork
:
JNetworkInfo
;
AType
:
Integer
;
ASubName
:
String
;
begin
Result
:=
TNetType
.
Other
;
AMgr
:=
ConnectivityManager
;
if
Assigned
(
AMgr
)
then
begin
ANetwork
:=
AMgr
.
getActiveNetworkInfo
;
if
Assigned
(
ANetwork
)
then
begin
AType
:=
ANetwork
.
getType
;
if
AType
=
TJConnectivityManager
.
JavaClass
.
TYPE_BLUETOOTH
then
Result
:=
TNetType
.
Bluetooth
else
if
AType
=
TJConnectivityManager
.
JavaClass
.
TYPE_ETHERNET
then
Result
:=
TNetType
.
Ethernet
else
if
AType
=
TJConnectivityManager
.
JavaClass
.
TYPE_WIFI
then
Result
:=
TNetType
.
Wifi
else
if
AType
=
TJConnectivityManager
.
JavaClass
.
TYPE_MOBILE
then
begin
AType
:=
TelephonyManager
.
getNetworkType
;
if
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_1xRTT
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_CDMA
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_EDGE
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_GPRS
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_IDEN
)
then
Result
:=
TNetType
.
Mobile2G
else
if
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_UMTS
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_EVDO_0
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_EVDO_A
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_EVDO_B
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_HSDPA
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_HSUPA
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_HSPA
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_EHRPD
)
or
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_HSPAP
)
then
Result
:=
TNetType
.
Mobile3G
else
if
(
AType
=
TJTelephonyManager
.
JavaClass
.
NETWORK_TYPE_LTE
)
then
Result
:=
TNetType
.
Mobile4G
else
begin
ASubName
:=
UpperCase
(
JStringToString
(
ANetwork
.
getSubtypeName
)
)
;
if
(
ASubName
=
'TD-SCDMA'
)
or
(
ASubName
=
'WCDMA'
)
or
(
ASubName
=
'CDMA2000'
)
then
Result
:=
TNetType
.
Mobile3G
;
end
;
end
;
end
;
end
;
end
;
{
$
ENDIF
}
{
$
IFDEF
IOS
}
function
iOSNetType
:
TNetType
;
var
ANetInfo
:
CTTelephonyNetworkInfo
;
AName
:
String
;
begin
if
(
ConnectionReachabilityFlags
and
kSCNetworkReachabilityFlagsIsWWAN
)
<
>
0
then
begin
ANetInfo
:=
TCTTelephonyNetworkInfo
.
Create
;
AName
:=
UpperCase
(
Copy
(
NSStrToStr
(
ANetInfo
.
currentRadioAccessTechnology
)
,
24
,
MaxInt
)
)
;
if
(
AName
=
'GPRS'
)
or
(
AName
=
'EDGE'
)
or
(
AName
=
'CDMA1X'
)
then
Result
:=
TNetType
.
Mobile2G
else
if
(
AName
=
'WCDMA'
)
or
(
AName
=
'HSDPA'
)
or
(
AName
=
'HSUPA'
)
or
(
AName
=
'CDMAEVDOREV0'
)
or
(
AName
=
'CDMAEVDOREVA'
)
or
(
AName
=
'CDMAEVDOREVB'
)
or
(
AName
=
'HRPD'
)
then
Result
:=
TNetType
.
Mobile3G
else
if
(
AName
=
'LTE'
)
then
Result
:=
TNetType
.
MobileLTE
else
Result
:=
TNetType
.
Other
;
end
else
Result
:=
TNetType
.
Wifi
end
;
{
$
ENDIF
}
begin
if
IsInternetConnected
then
begin
{
$
IFDEF
ANDROID
}
Result
:=
AndroidNetType
;
{
$
ENDIF
}
{
$
IFDEF
IOS
}
Result
:=
iOSNetType
;
{
$
ENDIF
}
{
$
IFDEF
MSWINDOWS
}
Result
:=
TNetType
.
Other
;
{
$
ENDIF
}
end
else
Result
:=
TNetType
.
None
;
end
;
|
TNetType 是一个枚举类型,列出了连接到 Internet 的网络类型,自己 定义下。
另外,这个需要里面的一些函数,请参考以前的 [FMX] 在应用中检测是否已经联网 中的实现