2012-09-10 4 views
6

"データネットワークモード"または "モバイルデータ"が現在有効ではない場合でもアプリでチェックするようにします。言い換えれば、携帯電話が現在WiFi経由で接続されていても、携帯データの料金が発生する可能性があるかどうかを確認する必要があります。Android "モバイルデータ"がオンになっているかどうかを確認する方法

私は、「モバイルデータ」が「アクティブ」であるかどうかを確認する次のコードを発見しました。

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ストアでの私の出版されたアプリの1のコード)

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

私は、これは、すべてのデバイス上で動作しますですわからないんだけど、それは私が試したいくつかの作業を行います。

私がアクティブのWiFiを持っている場合でも、正しい結果を返すように思わ
private boolean isMobileDataEnabled(Context ctx) { 
    int mobileData = Settings.Secure.getInt(ctx.getContentResolver(), "mobile_data", 0); 
    return mobileData == 1; 
} 

接続。

関連する問題