Reachability實時準確監聽網路狀態

2021-07-09 07:26:55 字數 2928 閱讀 2177

公司專案需要精確傳遞2g、3g、4g、wifi網路狀態引數,所以就想到了蘋果的reachability。但今天被reachability給坑了,初始化的時候使用 +reachabilitywithhostname:@」方法,結果每次檢測到的結果都是無網路。所以記下來這個坑,分享給大家。

1

2

3

4

5

6

7

8

#import

<

uikit

/uikit.h

>

#import

"reachability.h"

@inte***ce

:uiresponder

<

>

@property

(strong

,nonatomic

)uiwindow

*window

; @

property

(strong

,nonatomic

)reachability

*hostreach

; @

end

在.m檔案中實現檢測方法 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

// 實時監測網路情況

-(void

)setupreachability

// 網路狀態改變的通知方法

-(void

)reachabilitychanged:(

nsnotification*)

notification

break;

case

reachableviawifi:

wslog(@

"wifi");

break;

case

kreachablevia2g:

wslog(@

"2g");

break;

case

kreachablevia3g:

wslog(@

"3g");

break;

case

kreachablevia4g:

wslog(@

"4g");

break; } }

然後在程式啟動就開啟監聽,這樣我們就能夠監聽到網路狀態的實時改變了。

1

2

3

4

5

6 -(

bool):

(*)didfinishlaunchingwithoptions:(

nsdictionary*)

launchoptions

當然,我們使用的時候一般並不只是為了知道網路狀態改變,而是要根據網路狀態做一些事件,這樣我將監聽封裝在專案的網路工具類中。 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

/***  獲取網路狀態

**  @return 返回 0未知 1wifi 22g 33g 44g*/-

(nsinteger

)getcurrentreachability

return

status;

}我們在使用的時候直接呼叫網路工具類的 -getcurrentreachability方法來獲取當前網路狀態,再做一些針對性的操作。

用Reachability實時監聽網路的變化

在 didfinishlaunchingwithoptions中增加如下 使用通知中心監聽kreachabilitychangednotification通知 nsnotificationcenter defaultcenter addobserver self selector selector ...

推拉結合實現 準 實時推送

rocketmq consumer從broker的consumerqueue中拉取未消費的訊息時,採用長輪詢機制 push模式 即如果存在直接返回,如果不存在未消費的訊息,broker端會hold住此請求30s,在hold期間如果reputmessageservice往consumerqueue推送...

官方Reachability說明

1.示例說明 此示例用於演示關於如何使用systemconfiguratio reachalility程式介面來判定相關的網路連線狀態及狀態變化,所以在使用此示例中的reachability.h m 檔案於自有的專案中的前提是必須引入systemconfiguration.framework。2.首...