java - 如何在Android 中连续检查Internet 连接| 爪哇 | 安卓工作室
问题描述
我在 android studio 421 工作了几天,我对 android 开发非常陌生。在这里我需要检查互联网连接,如果有互联网,我需要显示一个网页,如果没有互联网,我需要显示一个警告框,提示“找不到互联网连接”。这是我到目前为止所做的代码。
package com.example.x;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
public void onBackPressed()
{
if(web.canGoBack())
web.goBack();
}
WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
web = findViewById(R.id.webView);
WebSettings webSettings = web.getSettings();
webSettings.setJavaScriptEnabled(true);
web.setWebChromeClient(new WebChromeClient());
web.loadUrl(getString(R.string.u));
web.setWebViewClient(new WebViewClient());
}
private class Callback extends WebViewClient {
@Override
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
return true;
}
}
}
但是当没有互联网连接时,警报不会显示。
我已启用
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在 AndroidManifest.xml 中。我被困在这里,我不知道下一步该怎么做。我google了很多,但找不到答案。谁能帮帮我吗?
解决方案
我需要检查互联网连接,如果有互联网,我需要显示一个网页,如果没有互联网,我需要显示一个警告框,提示“找不到互联网连接”。
所以,这与问题标题有些矛盾(不断观察互联网连接)
因此,如果您只需要检查互联网连接是否可用,您可以Context.CONNECTIVITY_SERVICE
通过触发使用系统服务进行检查,connectivityMgr.getActiveNetworkInfo()
但由于 API-21 已弃用,您需要将其迁移到connectivityMgr.getAllNetworks()
将其集成到实用程序方法中:
public boolean isOnline(Context context) {
boolean isConnected = false;
ConnectivityManager mConnectivityMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
// Checking internet connectivity
NetworkInfo activeNetwork = null;
if (mConnectivityMgr != null) {
activeNetwork = mConnectivityMgr.getActiveNetworkInfo(); // Deprecated in API 29
}
isConnected = activeNetwork != null;
} else {
Network[] allNetworks = mConnectivityMgr.getAllNetworks(); // added in API 21 (Lollipop)
for (Network network : allNetworks) {
NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
if (networkCapabilities != null) {
if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
|| networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
|| networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET))
isConnected = true;
}
}
}
return isConnected;
}
然后你可以这样做:
if (isOnline(MainActivity.this)) {
// display a webpage
} else {
// display an alert box saying
}
推荐阅读
- google-bigquery - 将字符串转换为数组
在标准 SQL 中 - ruby-on-rails - RVM / Rbenv 问题?
- python - Pandas groupy - 我可以将它用于不同行集的不同功能吗?
- linux - WebSocket Nginx 426 需要升级
- integer - 如何将“b 变量”声明为负数?
- python - 使用 csv 文件查找单引号中的逗号
- android-studio - 可以在 Android Studio 中打开使用 Gluon 构建的 JavaFX 项目进行进一步修改吗?
- python - Python 自定义类型无法识别
- python - 在 Python Jupyter Notebook 中重启内核并处理命令行弹出
- rust - 匹配 Result<> 的类型