2011-07-06 10 views
7

私のプログラムは、モバイルネットワークが特定の場所にあるかどうかを検出しようとします。ユーザー設定を判断するためのAndroid APIコール "Data Enabled"

問題は、データ接続がない場合、ネットワークが存在しないということではありません。ユーザーの設定に依存します。 NetworkInfo.isAvailable()に利用可能なAPIと、ユーザーがローミング中かローミング中か、AirplaneModeがオンかどうかなどのユーザー設定に使用できるAPIがあります。

私の問題は、ユーザーが設定/ 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のソースを表示する必要があります。ここでは、[http://omapzoom.org/?p=platform/frameworks/base .git; a = blob; f = core/java/android/provider/Settings.java; hb = HEAD)。 – bmaupin

0

はOPのために働きました。しかし、いくつかのデバイスで私はそれがデータが無効になっても真実を返すことがわかった。 Android APIにある代替ソリューションが見つかりました。

getDataState()TelephonyManagerの方法は非常に便利です。

以下の関数は、セルラデータが無効な場合はfalseを返します。

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の通知を受信して​​いないときに、excatの結果が出ません。 – Jeeva

+0

mobiledataが有効になっていてもfalseを返す – Jeeva

+0

まあ、すべてのデバイスでうまく動作します。興味深いことに、あなたが働いていないデバイスのために。その場合は他の回答を試してください。あなたはどのデバイスを持っていますか? –

関連する問題