【发布时间】:2020-01-12 02:00:36
【问题描述】:
我正在尝试通过回调测试网络可用性。
我想在连接不可用时显示 toast 通知。当我可以访问互联网时, onAvailable() 工作正常。
onAvailable() 似乎不起作用。没有显示消息“没有互联网连接”的 Toast。
我已经阅读了有关 unAvailable() 的文档中的一些信息。提到了超时值。我假设 onUnavailable() 在此超时后被调用。但是,如果它与问题有关,我不会。
ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
Toast.makeText(MainActivity.this, "Request successful", Toast.LENGTH_LONG).show();
}
@Override
public void onUnavailable() {
super.onUnavailable();
Toast.makeText(MainActivity.this, "No internet connection", Toast.LENGTH_LONG).show();
}
};
final ConnectivityManager connectivityManager
= (ConnectivityManager) MainActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE);
connectivityManager.registerNetworkCallback(new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build(), networkCallback);
【问题讨论】:
-
这段代码是在后台线程上执行的吗?
-
没有。它在主 ui 线程上执行
-
我遇到了同样的问题。一种解决方法是,在注册更新回调的同时,调用
cm.requestNetwork(request, callback, timeout)以获得指定超时的一次性请求。 -
+ requestNetwork(..) 的最小 API 级别,超时为 26 ????
标签: java android android-studio networking