7

「データ ネットワーク モード」または「モバイル データ」が現在アクティブになっていない場合でも、アプリで有効になっているかどうかを確認したい。つまり、電話が現在 WiFi 経由で接続されている場合でも、アプリがモバイル データ料金を発生させる可能性があるかどうかを確認する必要があります。

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

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

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

このコードの問題は、WiFi がアクティブな場合、オンに切り替えてもモバイル データがアクティブとして報告されないことです。

このコードのように、現在アクティブな接続モードであるかどうかではなく、モバイル データが「有効」であり、したがって潜在的にアクティブであるかどうかを判断するようにコードを変更できますか?

4

4 に答える 4

3

これを試してみてください。ほとんどの場合に機能します。

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

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

        if (!isConnected)
        {
            return false;
        }
于 2014-02-19T07:33:06.373 に答える
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;
于 2012-09-10T13:54:35.333 に答える
1

これがすべてのデバイスで機能するかどうかはわかりませんが、私が試したいくつかのデバイスでは機能します:

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

アクティブな WiFi 接続がある場合でも、正しい結果が返されるようです。

于 2016-10-06T12:56:28.973 に答える