如何防止在没有互联网连接时点击url-android studio
我使用Android Studio在Android应用程序中转换我的网站。 我试图显示对话框时,没有互联网连接在开幕式上。它很好用 但问题是当应用程序仍在运行时,突然没有互联网连接。然后,如果单击url,webview将显示“网页不可用” MainActivity.java如何防止在没有互联网连接时点击url-android studio,android,android-studio,webview,Android,Android Studio,Webview,我使用Android Studio在Android应用程序中转换我的网站。 我试图显示对话框时,没有互联网连接在开幕式上。它很好用 但问题是当应用程序仍在运行时,突然没有互联网连接。然后,如果单击url,webview将显示“网页不可用” MainActivity.java package com.example.myapp; import android.graphics.Bitmap; import android.provider.SyncStateContract; import a
package com.example.myapp;
import android.graphics.Bitmap;
import android.provider.SyncStateContract;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private WebView mywebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (!DetectConnection.checkInternetConnection(this)) {
try {
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setTitle("Info");
alertDialog.setMessage("Internet non disponible, Verifiez votre connexion internet et réessayez");
alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Réessayer", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
startActivity(getIntent());
}
});
alertDialog.show();
} catch (Exception e) {
}
} else {
mywebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mywebView.getSettings();
mywebView.loadUrl("https://myapp.com/");
mywebView.setWebViewClient(new WebViewClient());
mywebView.clearCache(true);
mywebView.clearHistory();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
}
}
public class myWebClient extends WebViewClient{
@Override
public void onPageStarted (WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
@Override
public void onBackPressed (){
if(mywebView.canGoBack()){
mywebView.goBack();
} else {
super.onBackPressed();
}
}
}
package com.example.mycollege;
import android.content.Context;
import android.net.ConnectivityManager;
public class DetectConnection {
public static boolean checkInternetConnection(MainActivity context) {
ConnectivityManager con_manager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
return (con_manager.getActiveNetworkInfo() != null
&& con_manager.getActiveNetworkInfo().isAvailable()
&& con_manager.getActiveNetworkInfo().isConnected());
}
}
DetectConnection.java
package com.example.myapp;
import android.graphics.Bitmap;
import android.provider.SyncStateContract;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private WebView mywebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (!DetectConnection.checkInternetConnection(this)) {
try {
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setTitle("Info");
alertDialog.setMessage("Internet non disponible, Verifiez votre connexion internet et réessayez");
alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Réessayer", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
startActivity(getIntent());
}
});
alertDialog.show();
} catch (Exception e) {
}
} else {
mywebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mywebView.getSettings();
mywebView.loadUrl("https://myapp.com/");
mywebView.setWebViewClient(new WebViewClient());
mywebView.clearCache(true);
mywebView.clearHistory();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
}
}
public class myWebClient extends WebViewClient{
@Override
public void onPageStarted (WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
@Override
public void onBackPressed (){
if(mywebView.canGoBack()){
mywebView.goBack();
} else {
super.onBackPressed();
}
}
}
package com.example.mycollege;
import android.content.Context;
import android.net.ConnectivityManager;
public class DetectConnection {
public static boolean checkInternetConnection(MainActivity context) {
ConnectivityManager con_manager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
return (con_manager.getActiveNetworkInfo() != null
&& con_manager.getActiveNetworkInfo().isAvailable()
&& con_manager.getActiveNetworkInfo().isConnected());
}
}
我想知道如何防止在未检测到连接时单击将默认页面“网页不可用”替换为对话框“没有internet,请检查您的连接!”。
有什么想法吗?您的myWebClient课程将类似于:
// Function to load all URLs in same webview
private class myWebClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!DetectConnection.checkInternetConnection(this)) {
Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show();
} else {
view.loadUrl(url);
}
return true;
}
}
检查内部的internet连接应覆盖以下内容
谢谢。首先: 在按钮的onClick方法中,首先检查internet是否可用 在活动中添加此方法:
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager objConnectivityManager;
try {
objConnectivityManager = (ConnectivityManager) context.getSystemService(Activity.CONNECTIVITY_SERVICE);
final boolean IsWifiAvailable = objConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
boolean IsInternetAvailable = false;
if (objConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null)
IsInternetAvailable = objConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
if (IsWifiAvailable == true || IsInternetAvailable == true)
return true;
else
return false;
} catch (Exception e) {
return false;
}
}
然后在onClick中调用此方法
boolean isNetworkAvailable = CommonMethods.isNetworkAvailable(this);
if (isNetworkAvailable){
// Call the webpage
}else {
Toast.makeText(this, "No internet connection", Toast.LENGTH_SHORT).show();
}
秒:
如果您询问有关-
然后在webview上使用超时。请参阅在单击时间时检查这两种方法,如果网络可用,则继续执行操作 1-用于检查连接:
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null;
}
2-检查互联网:
public boolean internetIsConnected() {
try {
String command = "ping -c 1 google.com";
return (Runtime.getRuntime().exec(command).waitFor() == 0);
} catch (Exception e) {
return false;
}
}
将权限添加到清单:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
我将其更改为sir@Pratik Butani,但它会显示以下消息“错误:不兼容的类型:MainActivity.myWebClient无法转换为MainActivity”。错误请参考中的“this”!检测连接。检查Internet连接(此)。有什么想法吗?将this
更改为MainActivity。我认为你应该学习一些基本概念,这些概念将有助于解决这类基本问题。我将此更改为MainActivity。这样就没有错误了。但这并不能解决问题。所以@Makarand先生,你叫什么CommonMethods?@MohamedFall CommonMethod是一个单独的类。为项目需要的常用方法创建。只需在其中复制并粘贴isNetworkAvailable方法,然后您就可以从任何地方调用它。