我已经用webview创建了应用程序。如果我有任何动作,网络断开,我想显示一个警报。我试过下面的方法,
在oncreate方法中添加了这个。
public class AndroidNetTestActivity extends Activity {
public static WebView webview;
private Handler mHandler = new Handler();
private boolean isConnected = true;
final String offlineMessageHtml = "Net is disconnected";
final String timeoutMessageHtml = "Connection timed out";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview=(WebView)findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///android_asset/www/index.htm");
webview.addJavascriptInterface(new MyJavaScriptInterface(), "Android");
isConnected=isNetworkAvailable();
webview.setNetworkAvailable(isConnected);
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
isConnected=isNetworkAvailable();
if (isConnected) {
// return false to let the WebView handle the URL
return false;
} else {
// show the proper "not connected" message
view.loadData(offlineMessageHtml, "text/html", "utf-8");
// return true if the host application wants to leave the current
// WebView and handle the url itself
return true;
}
}
@Override
public void onReceivedError (WebView view, int errorCode,
String description, String failingUrl) {
if (errorCode == ERROR_TIMEOUT) {
view.stopLoading(); // may not be needed
view.loadData(timeoutMessageHtml, "text/html", "utf-8");
}
}
});
webview.setWebChromeClient(new WebChromeClient());
}
final class MyJavaScriptInterface
{
public void ProcessJavaScript(final String scriptname, final String args)
{
mHandler.post(new Runnable()
{
public void run()
{
//ToDo
}
});
}
}
public boolean isNetworkAvailable() {
Context context = getApplicationContext();
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
//boitealerte(this.getString(R.string.alert),"getSystemService rend null");
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
}
如果单击登录按钮,如果网络不可用,它将显示一条错误消息。
但它不起作用。请检查我的密码并告诉我我做错了什么
最佳答案
好啊。。。我更新了你的代码。只是看看
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class AndroidNetTestActivity extends Activity {
public static WebView webview;
private Handler mHandler = new Handler();
private boolean isConnected = true;
final String offlineMessageHtml = "Net is disconnected";
final String timeoutMessageHtml = "Connection timed out";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.full_screen_image_layout);
webview=(WebView)findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("http://www.google.com");
webview.addJavascriptInterface(new MyJavaScriptInterface(), "Android");
isConnected=isNetworkAvailable();
webview.setNetworkAvailable(isConnected);
webview.setWebViewClient(new WebViewClient() {
/* (non-Javadoc)
* @see android.webkit.WebViewClient#onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap)
*/
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
System.out.println("page loading started");
// TODO Auto-generated method stub
if(!isNetworkAvailable2())
{
showInfoMessageDialog("network not available");
System.out.println("network not available");
return;
}
else System.out.println("network available");
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
isConnected=isNetworkAvailable2();
if (isConnected) {
// return false to let the WebView handle the URL
return false;
} else {
// show the proper "not connected" message
// view.loadData(offlineMessageHtml, "text/html", "utf-8");
// return true if the host application wants to leave the current
// WebView and handle the url itself
return true;
}
}
@Override
public void onReceivedError (WebView view, int errorCode,
String description, String failingUrl) {
if (errorCode == ERROR_TIMEOUT) {
view.stopLoading(); // may not be needed
// view.loadData(timeoutMessageHtml, "text/html", "utf-8");
}
}
});
//webview.setWebChromeClient(new WebChromeClient());
}
final class MyJavaScriptInterface
{
public void ProcessJavaScript(final String scriptname, final String args)
{
mHandler.post(new Runnable()
{
public void run()
{
//ToDo
}
});
}
}
private void showInfoMessageDialog(String meaasge)
{
AlertDialog alertDialog = new AlertDialog.Builder(
AndroidNetTestActivity.this).create();
alertDialog.setTitle("Connectivity");
alertDialog.setMessage(meaasge);
alertDialog.setButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.cancel();
}
});
//alertDialog.setIcon(R.drawable.error);
alertDialog.show();
}
private boolean isNetworkAvailable2()
{
System.out.println("isNetworkAvailable2 called");
NetworkInfo info = (NetworkInfo) ((ConnectivityManager) getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (info == null || !info.isAvailable() || !info.isConnected())
return false;
else return true;
}
public boolean isNetworkAvailable() {
Context context = getApplicationContext();
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
//boitealerte(this.getString(R.string.alert),"getSystemService rend null");
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
}