web-dev-qa-db-ja.com

Android P API 28で廃止されたConnectivityManager.TYPE_WIFIの代替とは何ですか?

ConnectivityManager.TYPE_WIFI は非推奨ですAndroid P API28。また、 NetworkInfo#getType および ConnectivityManager.TYPE_MOBILE も廃止されました。

それで、彼らのための選択肢は何ですか? NetworkCapabilitiesクラスのメソッドを使用する必要があることを理解しました。ただし、NetworkCapabilitiesクラスでgetType()を実行する方法や、WIFIおよびセルラーデータチェックを追加する方法など、すべてを1か所にマージすることはできませんか?

手伝ってください。

9
Amrut

_ConnectivityManager.TYPE_WIFI_非推奨NetworkCapabilities を使用する必要があります。

これは、ネットワーク選択の古い_ConnectivityManager.TYPE_MOBILE_メソッドを置き換えます。アプリケーションは高い帯域幅を必要とし、新しい高速ネットワーク(LTEなど)が出現すると陳腐化のリスクがあるため、Wi-Fiの必要性を示すのではなく、アプリケーションは高い帯域幅が必要であることを指定する必要があります。同様に、アプリケーションがバルク転送に非従量制ネットワークを必要とする場合、すべてのセルラーベースの接続が従量制であり、すべてのWi-Fiベースの接続は従わないことを指定できます。

代わりに、アプリケーションは NetworkCapabilities.hasTransport(int) または を使用する必要がありますrequestNetwork(NetworkRequest, NetworkCallback) 適切なネットワークを要求します。サポートされているトランスポート用。

この方法で試すことができます

_NetworkAgentInfo networkAgent;
int type = ConnectivityManager.TYPE_NONE;
if (networkAgent.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
     type = ConnectivityManager.TYPE_MOBILE;
} else if (networkAgent.networkCapabilities.hasTransport(
     NetworkCapabilities.TRANSPORT_WIFI)) {
     type = ConnectivityManager.TYPE_WIFI;
}
_
2
IntelliJ Amiya

以下のスニペットを使用して、Wifi接続または携帯電話があるかどうかを確認できます。

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.M) {
    Network network = connectivityManager.getActiveNetwork();
    NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
    return capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
}
8
Chintan Soni

以下の方法を使用してください。19/ 06/2019

public boolean isconnectedToWifi(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager == null) {
        return false;
    }

    if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.M) {
        Network network = connectivityManager.getActiveNetwork();
        NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
        if (capabilities == null) {
            return false;
        }
        return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
    } else {
        NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (networkInfo == null) {
            return false;
        }
        return networkInfo.isConnected();
    }
}
3
Syed Zeeshan