2011-07-06 22 views
7

我的程序嘗試檢測移動網絡是否在某個位置可用。Android API調用以確定用戶設置「數據已啓用」

問題是,當我沒有數據連接時,並不意味着網絡不存在......這取決於用戶的喜好。 有可用的API,以及用戶設置,如用戶是否正在漫遊和漫遊已啓用或AirplaneMode是否開啓。

我的問題是,我無法弄清楚用戶是否在Settings/WirelessNetworks/MobileNetworks下禁用了數據服務。

聽起來像一個微不足道的問題,但我還沒有找到一個API調用。

回答

8

在你的活動:

boolean mobileDataAllowed = Settings.Secure.getInt(getContentResolver(), "mobile_data", 1) == 1; 

來源:https://github.com/yanchenko/quick-settings/blob/master/src/com/bwx/bequick/handlers/MobileDataSettingHandler2.java#L123

+0

優秀的,這工程!謝謝布萊恩,你讓我的一天:) – Rick

+0

我在哪裏可以找到所有可以傳遞給Setttings.Secure的字符串列表(即「mobile_data」)? – gonzobrains

+0

正式,[這裏](http://developer.android.com/reference/android/provider/Settings.Secure.html)和[這裏](http://developer.android.com/reference/android/provider/ Settings.Global.html)。對於未公開或隱藏的設置,您需要查看core/java/android/provider/Settings.java的源代碼,您可以在其中查看[here](http://omapzoom.org/?p=platform/frameworks/base的.git; A =斑點; F =芯/ JAVA /機器人/提供者/ Settings.java; HB = HEAD)。 – bmaupin

0

我知道上面的回答工作了OP。但是在少數設備中,我發現即使數據被禁用,它也會返回true。 所以我找到了一個在Android API中的備用解決方案。

getDataState()方法TelephonyManager將是非常有用的。

當蜂窩數據被禁用時,下面的函數返回false,否則返回true。

private boolean checkMobileDataIsEnabled(Context context){ 
     boolean mobileYN = false; 

     TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     if (tm.getSimState() == TelephonyManager.SIM_STATE_READY) { 
      TelephonyManager tel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
//   if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) 
//   { 
//    mobileYN = Settings.Global.getInt(context.getContentResolver(), "mobile_data", 0) == 1; 
//   } 
//   else{ 
//    mobileYN = Settings.Secure.getInt(context.getContentResolver(), "mobile_data", 0) == 1; 
//   } 
      int dataState = tel.getDataState(); 
      Log.v(TAG,"tel.getDataState() : "+ dataState); 
      if(dataState != TelephonyManager.DATA_DISCONNECTED){ 
       mobileYN = true; 
      } 

     } 

     return mobileYN; 
    } 
+0

它不給激動人心的結果,當你收到無線網絡禁用通知.. – Jeeva

+0

即使當啓用移動數據時,它返回false – Jeeva

+0

好吧,它適用於我所有的設備。有趣的是,你沒有工作的設備。在這種情況下嘗試其他答案。你有哪些設備? –

相關問題