studio inhabilitado example desactivado android android-webview

android - inhabilitado - ¿Cómo editar o crear una página de error personalizada para WebView?



webview apk (3)

He intentado usar todas las soluciones anteriores, pero ninguna de ellas funciona. Trenzé un poco mi código y obtuve la solución:

package com.samnjor.tipsmaster; import android.content.Context; import android.graphics.Bitmap; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import android.widget.TextView; import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.InterstitialAd; public class TodayTips extends AppCompatActivity { String ShowOrHideWebViewInitialUse = "show"; private WebView webview ; private ProgressBar spinner; private String TAG = TodayTips.class.getSimpleName(); InterstitialAd mInterstitialAd; final String noconnectionHtml = "Failed to connect ot the internet"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_today_tips); mInterstitialAd = new InterstitialAd(this); // set the ad unit ID mInterstitialAd.setAdUnitId(getString(R.string.adbig)); AdRequest adRequest = new AdRequest.Builder() .build(); // Load ads into Interstitial Ads mInterstitialAd.loadAd(adRequest); mInterstitialAd.setAdListener(new AdListener() { public void onAdLoaded() { showInterstitial(); } }); } private void showInterstitial() { if (mInterstitialAd.isLoaded()) { mInterstitialAd.show(); } webview =(WebView)findViewById(R.id.webView); spinner = (ProgressBar)findViewById(R.id.progressBar1); webview.setWebViewClient(new CustomWebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setDomStorageEnabled(true); webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER); if(haveNetworkConnection()){ webview.loadUrl("http://you domain here"); } else { webview.loadData(noconnectionHtml, "text/html", "utf-8"); // } } private boolean haveNetworkConnection() { boolean haveConnectedWifi = false; boolean haveConnectedMobile = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if (ni.getTypeName().equalsIgnoreCase("WIFI")) if (ni.isConnected()) haveConnectedWifi = true; if (ni.getTypeName().equalsIgnoreCase("MOBILE")) if (ni.isConnected()) haveConnectedMobile = true; } return haveConnectedWifi || haveConnectedMobile; } // This allows for a splash screen // (and hide elements once the page loads) private class CustomWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView webview, String url, Bitmap favicon) { // only make it invisible the FIRST time the app is run if (ShowOrHideWebViewInitialUse.equals("show")) { webview.setVisibility(webview.INVISIBLE); } } @Override public void onPageFinished(WebView view, String url) { ShowOrHideWebViewInitialUse = "hide"; spinner.setVisibility(View.GONE); view.setVisibility(webview.VISIBLE); super.onPageFinished(view, url); } }`` }

He creado un diseño de WebView, que se utiliza para acceder a un sitio web específico, sin embargo, sería útil editar o crear un recurso personalizado "La página web no está disponible " cuando un teléfono no tiene una conexión de red o la página se agota. Sé que es posible porque si abre la aplicación " Wikidroid " mientras el teléfono está en modo Avión, recibirá la página de error " Artículo no disponible " en lugar de la página de error estándar de " Página web no disponible " de Android.

He buscado en Internet por todas partes, y no he encontrado ningún recurso en línea que aborde esta solicitud. Cualquier ayuda es muy apreciada. Gracias por adelantado.


Marco W. tiene razón.

myWebView.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { myWebView.loadUrl("file:///android_asset/custom_url_error.htm"); } });


Para determinar cuándo el dispositivo tiene una conexión de red, solicite el permiso <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> y luego puede verificar con el siguiente código. Primero define estas variables como variables de clase.

private Context c; private boolean isConnected = true;

En tu método onCreate() inicializa c = this;

A continuación, compruebe la conectividad.

ConnectivityManager connectivityManager = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) { NetworkInfo ni = connectivityManager.getActiveNetworkInfo(); if (ni.getState() != NetworkInfo.State.CONNECTED) { // record the fact that there is not connection isConnected = false; } }

Luego, para interceptar los requisitos de WebView , podría hacer algo como lo siguiente. Si usa esto, probablemente querrá personalizar los mensajes de error para incluir parte de la información que está disponible en el método onReceivedError .

final String offlineMessageHtml = "DEFINE THIS"; final String timeoutMessageHtml = "DEFINE THIS"; WebView browser = (WebView) findViewById(R.id.webview); browser.setNetworkAvailable(isConnected); browser.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { 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"); } } });