2012-09-10 35 views
6

我希望我的應用程序檢查「數據網絡模式」或「移動數據」是否啓用,即使它目前未處於活動狀態。換句話說,我需要檢查應用程序是否可能會產生移動數據收費,即使手機目前是通過WiFi連接的。如何檢查Android「移動數據」是否在

通過Google搜索,我發現下面的代碼檢查「Mobile data」是否爲「active」。

ConnectivityManager cm = 
     (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE; 

此代碼的問題在於,如果WiFi處於活動狀態,則即使將移動數據切換爲開啓狀態,也不會將移動數據報告爲活動狀態。

是否可以修改代碼以確定移動數據是否「已啓用」並因此可能處於活動狀態,而不是像本代碼中那樣是否爲當前活動的連接模式?

+0

看到這個: http://stackoverflow.com/questions/3644144/how-to-disable-mobile-data-on-android – Sharp80

+0

看到這一點:http://stackoverflow.com/questions/3644144/how -to-disable-mobile-data-on-android – Sharp80

+0

你有沒有找到解決方案? –

回答

2

試試這個

ConnectivityManager cm = (ConnectivityManager) 
      activity.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
     // if no network is available networkInfo will be null 
     // otherwise check if we are connected 
     if (networkInfo != null && networkInfo.isConnected()) { 
      return true; 
     } 
     return false; 
+0

感謝您的建議;但是,如果WiFi或移動數據連接可用,此代碼返回true。我正在嘗試檢測移動數據是否啓用(無論是否有WiFi連接)。 – prepbgg

0

請看看這段代碼:(我已發佈的應用之一的代碼Play商店)

private static boolean isAPNEnabled(Context paramContext) { 
    try { 
     NetworkInfo networkInfo = ((ConnectivityManager) paramContext.getSystemService("connectivity")).getActiveNetworkInfo(); 
     return networkInfo.isConnected(); 
    } catch (Exception e) { 
     return false; 
    } 
} 
+0

感謝您的建議;但是,如果WiFi或移動數據連接可用,此代碼返回true。我正在嘗試檢測移動數據是否啓用(無論是否有WiFi連接)。 – prepbgg

2

試試這個,它工作在大多數情況下。

ConnectivityManager cm = 
       (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     boolean isConnected = activeNetwork != null && 
       activeNetwork.isConnected(); 

     if (!isConnected) 
     { 
      return false; 
     } 
+0

注意:'getNetworkInfo()'自API 23以來已棄用。 – milosmns

0

我不知道這是在所有設備上都可以工作,但它確實對一些我想工作:

private boolean isMobileDataEnabled(Context ctx) { 
    int mobileData = Settings.Secure.getInt(ctx.getContentResolver(), "mobile_data", 0); 
    return mobileData == 1; 
} 

這似乎返回正確的結果,即使我有一個積極的WiFi連接。

相關問題