Amr*_*rut 9 android android-sdk-manager android-api-levels
在Android P API 28中不推荐使用ConnectivityManager.TYPE_WIFI。此外,也不推荐使用NetworkInfo#getType和ConnectivityManager.TYPE_MOBILE。
那么,有什么替代方案呢?我知道我们必须使用NetworkCapabilities类中的方法。但是,我无法将所有内容合并到一个地方,例如如何在NetworkCapabilities类中进行getType()以及如何在其上添加WIFI和蜂窝数据检查?
请协助。
您可以使用以下代码段检查您是否具有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));
}
Run Code Online (Sandbox Code Playgroud)
使用以下方法.. 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();
}
}
Run Code Online (Sandbox Code Playgroud)
ConnectivityManager.TYPE_WIFI已弃用。你应该使用NetworkCapabilities.
这取代了旧ConnectivityManager.TYPE_MOBILE的网络选择方法。与其表明对 Wi-Fi 的需求,因为应用程序需要高带宽并在出现新的、快速的网络(如 LTE)时有过时的风险,应用程序应指明它需要高带宽。类似地,如果应用程序需要非计量网络进行批量传输,它可以指定而不是假设所有基于蜂窝的连接都已计量而所有基于 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5792 次 |
| 最近记录: |