ConnectivityManager.getNetworkInfo()
- устаревший метод.
Правильнее будет сделать ConnectivityManager.NetworkCallback
Чтобы ответить на ваш вопрос, проверяя, подключены ли вы к inte rnet через Wi-Fi или мобильные данные:
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build();
connMgr.requestNetwork(request, new ConnectivityManager.NetworkCallback() {
// This callback is invoked when there is a valid Mobile Data or WiFi network
// but is later lost during the course of using the application.
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
}
// This callback is invoked when there is a valid Mobile Data or WiFi network
// that is ready for use
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
}
// This callback is invoked when there is no valid Mobile Data or WiFi network
// after a specific timeout has timed out.
@Override
public void onUnavailable() {
super.onUnavailable();
}
});
Существуют различные другие обратные вызовы, но я считаю, что для вашего варианта использования это основные из них, которые вам понадобятся. Наконец, чтобы добавить указанный c тайм-аут, который был упомянут в обратном вызове onUnavailable
, вы можете использовать этот конструктор для своего ConnectivityManager.NetworkCallback
:
ConnectivityManager.NetworkCallback(int timeoutMs)
Я действительно надеюсь, что это поможет. Дополнительную информацию об API см. Здесь