ConnectivityManager的getAllNetworkInfo()已過時的API 23和評論它說使用getAllNetworks()代替。 但是我發現這些不具有相同的行爲。例如,如果手機有一個活動蜂窩網絡可用,但wifi當前已打開,則getAllNetworkInfo()將返回兩個網絡(它將顯示無線連接和蜂窩連接斷開連接)。getAllNetworkInfo()已過時併購,但其更換有差異的行爲
然而getAllNetwork()只返回在這種情況下,WiFi網絡。如果wifi關閉,它將返回蜂窩網絡。換句話說,它似乎只返回當前活動的網絡(但是有另一種方法是getActiveNetworkInfo())。
除了getAllNetworkInfo()僅返回一個網絡,getAllNetworks()也僅退休一個網絡。
棉花糖,我怎麼能得到相同的行爲getAllNetworkInfo()即得到可用,他們是否斷開或連接的所有網絡的列表?
最後,我想知道,如果蜂窩數據連接。目前,使用新的ConnectivityManager API,我看不到任何這樣做的方式。
如果下面的代碼符合SDK 22並在M上運行,那麼它將列出兩個網絡,如果將getAllNetworkInfo()交換爲getAllNetworks()(以及網絡< - > NetworkInfo的相應更改)並使用SDK23編譯並運行在同一臺設備上,只列出一個網絡。
public static synchronized void checkNetworkConnectivity()
{
Context context;
context = CityIdApplication.getHandsetState().getContext();
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo [] networks = cm.getAllNetworkInfo();
//Network[] networks = cm.getAllNetworks();
if (networks != null) {
for (Network network : networks) {
NetworkInfo info = cm.getNetworkInfo(network);
if (info.isAvailable()) {
if (info.isConnected()) {
Log.v(TAG, "== NETWORK type: " + info.getTypeName() + "[" + info.getSubtypeName()
+ "], state: " + info.getDetailedState());
} else
Log.v(TAG, "== NETWORK type: " + info.getTypeName() + "[" + info.getSubtypeName()
+ "], state: " + info.getDetailedState() + "=== isAvailable");
} else
Log.v(TAG, "== NETWORK type: " + info.getTypeName() + "[" + info.getSubtypeName()
+ "], state: " + info.getDetailedState() + "=== NOT Available");
}
}
當您調用getAllNetworkInfo時會拋出哪個異常? 我測試getAllNetworkInfo在Android M(API 23)模擬器仍然工作(雖然編譯與棄用警告)。 – kzz
@kzz,我誤解了它的投擲。一些其他的CM方法現在會拋出,比如startUsingNetworkFeature() – Gruntcakes
嘗試挖掘android的源代碼。 :) 我相信他們改變了API的行爲。而且沒有一種「合法」的方式來實現你想要的。 – ProblemSlover