2017-09-27 101 views
2

下面是我的代碼,我試圖通過狀態欄獲取信號強度。從狀態欄崩潰獲取手機信號

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; 

碰撞發生在(iOS的11時,Xcode 9,iPhone X): -

[UIStatusBar_Modern valueForUndefinedKey:]:這個類不是密鑰值編碼兼容的關鍵foregroundView

+0

你想要什麼? Wifi信號?沒有酒吧? – KiranJasvanee

+0

沒有wifi信號的活動欄?或SignalMode? – KiranJasvanee

+0

@KiranJasvanee我想要網絡類型3g,4g,Wifi,LTE .. – Ashish

回答

6

你可以用這個

NSArray *subviews = nil; 
id statusBar = [[UIApplication sharedApplication] valueForKey:@"statusBar"]; 
if ([statusBar isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) { 
    subviews = [[[statusBar valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; 
} else { 
    subviews = [[statusBar valueForKey:@"foregroundView"] subviews]; 
} 
+0

我有問題發佈這個,從哪個關鍵得到如果wifi,3g或lte在那裏..? – Ashish

+0

謝謝@yz wu這正是我正在尋找的+1 –

+0

@Ashish上面的代碼片段解決了iPhone X更改的問題。爲了獲得代碼,你必須循環子視圖來提取'UIStatusBarDataNetworkItemView'視圖,然後獲取其'dataNetworkType'值。它是這樣的。 '爲(在子視圖ID子視圖){' '如果([子視圖isKindOfClass:' '[NSClassFromString(@ 「UIStatusBarDataNetworkItemView」)類]]){' '[(的NSNumber *)[子視圖valueForKey:@「dataNetworkType」] intValue]; // dataNetworkType值一定要存儲和使用它,或者從方法中返回它 'break;' '}' '}' –