2011-07-06 14 views
7

Programım, bir mobil ağın belirli bir konumda bulunup bulunmadığını tespit etmeye çalışır.Android API çağrısı kullanıcı ayarını belirlemek için "Veri Etkinleştirildi"

Sorun şu ki, bir veri bağlantım olmadığı zaman ağın orada olmadığı anlamına gelmez ... kullanıcı tercihlerine bağlıdır. NetworkInfo.isAvailable() için kullanılabilir API'lar vardır ve kullanıcı dolaşım ve dolaşım etkin olup olmadığı veya AirplaneMode'un açık olup olmadığı gibi kullanıcı ayarları için.

Sorunum, kullanıcının Ayarlar/WirelessNetworks/MobileNetworks altında devre dışı bırakılmış veri servislerine sahip olup olmadığını anlayamıyorum.

Küçük bir sorun gibi görünüyor ama bir API çağrısı bulamadım. etkinlik olarak

cevap

8

:

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

Kaynak: cevap yukarıda biliyorum https://github.com/yanchenko/quick-settings/blob/master/src/com/bwx/bequick/handlers/MobileDataSettingHandler2.java#L123

+0

Mükemmel, işe yarıyor! Teşekkürler Bryan, benim günümü yaptın :) – Rick

+0

Ayarlayabildiğin tüm dizelerin (yani "mobile_data") Setttings.Secure'a ait bir listesini nereden bulabilirim? – gonzobrains

+0

Resmi olarak, [burada] (http://developer.android.com/reference/android/provider/Settings.Secure.html) ve [burada] (http://developer.android.com/reference/android/provider/ Settings.Global.html). Belgelenmemiş veya gizli ayarlar için, [burada] görüntüleyebileceğiniz çekirdek/java/android/provider/Settings.java kaynağını görmeniz gerekir (http://omapzoom.org/?p=platform/frameworks/base .git a = damla f = çekirdek/java/robot/sağlayıcısı/Settings.java; hB = KAFA). – bmaupin

0

OP için çalıştı. Ancak, birkaç cihazda veri devre dışı bırakılmış olsa bile, true değerini döndürdüğünü tespit ettim. Android API’da bulunan alternatif bir çözüm buldum. TelephonyManager getDataState() yöntemi çok yararlı olacaktır.

Aksi takdirde, hücresel veri devre dışı bırakıldığında işlev false değerini döndürür.

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

wifi devre dışı bırakılması için bildirim alırken excat sonucu vermez .. – Jeeva

+0

mobiledata etkin olduğunda bile false değerini döndürür – Jeeva

+0

iyi, tüm cihazlar için benim için çalışır. İlginç bir şekilde, çalışmadığınız cihaz için. Bu durumda diğer cevapları deneyin. hangi cihaz var? –

İlgili konular