如何显示没有互联网连接的弹出和一个HTML页面时,网络不可用的WebView? [英] How do I display no internet connection popup and an html page when internet is not available for webview?

查看:375
本文介绍了如何显示没有互联网连接的弹出和一个HTML页面时,网络不可用的WebView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用webviews在我的应用程序,并要确保在网络不可用的消息显示弹出的没有互联网连接,并在后台将显示一个HTML页面,指出需要连接互联网。我增加了一些code检查互联网连接,但它不工作/显示为对号错误(code的基础上增加在线研究)。任何线索如何解决一样吗?下面是低于code:

 公共无效的onCreate(包savedInstanceState){
            super.onCreate(savedInstanceState);

            requestWindowFeature(Window.FEATURE_NO_TITLE);
           // getWindow()requestFeature(Window.FEATURE_PROGRESS)。
            getWindow()setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN)。

            的setContentView(R.layout.main);
            进度=(进度)findViewById(R.id.ProgressBar);
            progress.setVisibility(View.VISIBLE);
             的WebView =(web视图)findViewById(R.id.webview);


             如果(CheckNetwork.isInternetAvailable(MainActivity.this))
             {
            webview.setInitialScale(1);
            WebSettings webSettings = webview.getSettings();
            webSettings.setJavaScriptEnabled(真正的);

            webview.getSettings()setJavaScriptEnabled(真)。
            。webview.getSettings()setLoadWithOverviewMode(真正的);
            。webview.getSettings()setUseWideViewPort(真正的);
          // webview.setWebViewClient(新MyCustomWebViewClient());
            如果(Build.VERSION.SDK_INT> = 11){
                webview.setLayerType(View.LAYER_TYPE_SOFTWARE,NULL);
            }
            webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
            webview.setScrollbarFadingEnabled(假);
           webview.getSettings()setRenderPriority(RenderPriority.HIGH)。
            。webview.getSettings()setCacheMode(WebSettings.LOAD_NO_CACHE);
           // webview.getSettings()setBlockNetworkLoads(真)。
            。webview.getSettings()setBuiltInZoomControls(真正的);
            webview.loadUrl(http://googi.com/money/);
            webview.getSettings()setDomStorageEnabled(真)。
            webview.getSettings()setDatabaseEnabled(真)。
            webview.getSettings()setAppCacheEnabled(真)。
            //http://www.inpixelitrust.fr/demos/restaurant_picker/
            //file:///android_asset/index.html
            。webview.getSettings()setSupportZoom(假);
             }其他{
                  吐司面包= Toast.makeText(MainActivity.this,没有网络连接,Toast.LENGTH_LONG);
                  toast.show();
             }
           / * webview.setWebChromeClient(新WebChromeClient()
            {
             公共无效onProgressChanged(web视图来看,INT进度)
             {
               //更新进度
               MainActivity.this.setProgress(进度* 100);
             }
            }); * /
            如果(!isTaskRoot()){
                最终意向意图= getIntent();
                最后弦乐intentAction = intent.getAction();
                如果(intent.hasCategory(Intent.CATEGORY_LAUNCHER)及&安培; intentAction =空&安培;!&安培; intentAction.equals(Intent.ACTION_MAIN)){
                    完();
                    返回;
                }
            }

            setFullscreen();
        }

        公共布尔的onkeydown(INT键code,KeyEvent的事件){
            如果(event.getAction()== KeyEvent.ACTION_DOWN){
                开关(钥匙code)
                {
                案例KeyEvent.KEY code_BACK:
                    如果(webview.canGoBack()==真){
                        webview.goBack();
                    }其他{
                        完();
                    }
                    返回true;
                }

            }
            返回super.onKeyDown(键code,事件);
        }
        @覆盖
        公共布尔onCreateOptionsMenu(菜单菜单)
        {
          super.onCreateOptionsMenu(菜单);

          menu.add(0,MENU_FULLSCREEN_ON,0,R.string.menu_fullscreen_on);
          menu.add(0,MENU_FULLSCREEN_OFF,0,R.string.menu_fullscreen_off);


          返回true;
        }
        / **
         *这是功能来查看互联网连接
         * @返回true,如果互联网是preSENT否则返回FALSE
         * /
        公共布尔checkInternetConnection(){
            ConnectivityManager厘米=(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);

            如果(cm.getActiveNetworkInfo()=空&安培;!&安培; cm.getActiveNetworkInfo()isAvailable()&安培;&安培; cm.getActiveNetworkInfo()isConnected()){
                返回true;

            } 其他 {
                返回false;
            }
        }
        @覆盖
        公共布尔prepareOptionsMenu(功能菜单)上
        {
          super.on prepareOptionsMenu(菜单);

          menu.findItem(MENU_FULLSCREEN_ON).setVisible(全屏!);
          menu.findItem(MENU_FULLSCREEN_OFF).setVisible(全屏);

          返回true;
        }
        @覆盖
        公共布尔onOptionsItemSelected(菜单项项)
        {
          开关(item.getItemId()){

          案例MENU_FULLSCREEN_ON:
            全屏= TRUE;
            setFullscreen();
            返回true;
          案例MENU_FULLSCREEN_OFF:
            全屏= FALSE;
            setFullscreen();
            返回true;

          }
          返回false;
        }
        私人无效setFullscreen()
        {
          如果(全屏){
            。getWindow()addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getWindow()。clearFlags(
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
          } 其他 {
            。getWindow()clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getWindow()。addFlags(
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
          }

        }
    / *
        @覆盖
        保护无效onNewIntent(意向意图){

              setFullscreen();


        } * /
        公共类CheckNetwork {


             最终的字符串变量= CheckNetwork.class.getSimpleName();



            公共布尔isInternetAvailable(上下文的背景下)
            {
                的NetworkInfo信息=(的NetworkInfo)((ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE))getActiveNetworkInfo()。

                如果(资讯== NULL)
                {
                     Log.d(TAG,没有互联网连接);
                     返回false;
                }
                其他
                {
                    如果(info.isConnected())
                    {
                        Log.d(TAG,网络连接提供......);
                        返回true;
                    }
                    其他
                    {
                        Log.d(TAG,网络连接);
                        返回true;
                    }

                }
            }
                }
        私有类MyCustomWebViewClient扩展WebViewClient {
            @覆盖
            公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){
                view.loadUrl(URL);
                返回true;
            }
            公共无效onPageStarted(web视图查看,字符串URL,位图图标){
                progress.setVisibility(View.VISIBLE);
              }
              公共无效onPageFinished(web视图查看,字符串URL){
                progress.setVisibility(View.GONE);
                同步(SPLASH_LOCK){
                    SPLASH_LOCK.notifyAll();
                }
              }
        }
 

解决方案

您可以有以下code。

 公共类CheckNetwork {


    私有静态最后字符串变量= CheckNetwork.class.getSimpleName();



    公共静态布尔isInternetAvailable(上下文的背景下)
    {
        的NetworkInfo信息=(的NetworkInfo)((ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE))getActiveNetworkInfo()。

        如果(资讯== NULL)
        {
             Log.d(TAG,没有互联网连接);
             返回false;
        }
        其他
        {
            如果(info.isConnected())
            {
                Log.d(TAG,网络连接提供......);
                返回true;
            }
            其他
            {
                Log.d(TAG,网络连接);
                返回true;
            }

        }
    }
}
 

然后,在活动中,您可以用

 如果(CheckNetwork.isInternetAvailable(MainActivity.this))
 {
       // 做一点事
 }
 

注:此检查网络连接。您可以连接到无线网络,但是您可能没有互联网连接。

I am using webviews in my app and want to make sure when internet is not available the pop up message displays for no internet connection and also displays an html page in the background saying internet connection required. I have added some code for checking internet connection, but its not working/ showing errors for checkmark(code added based on online research). Any clue how to fix the same? Here's the code below:

 public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);

            requestWindowFeature(Window.FEATURE_NO_TITLE);
           // getWindow().requestFeature(Window.FEATURE_PROGRESS);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

            setContentView(R.layout.main);
            progress = (ProgressBar) findViewById(R.id.ProgressBar);
            progress.setVisibility(View.VISIBLE);
             webview = (WebView)findViewById(R.id.webview);


             if(CheckNetwork.isInternetAvailable(MainActivity.this))
             {
            webview.setInitialScale(1);
            WebSettings webSettings = webview.getSettings();
            webSettings.setJavaScriptEnabled(true);

            webview.getSettings().setJavaScriptEnabled(true);
            webview.getSettings().setLoadWithOverviewMode(true);
            webview.getSettings().setUseWideViewPort(true);
          //  webview.setWebViewClient(new MyCustomWebViewClient());
            if (Build.VERSION.SDK_INT >= 11){
                webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            }
            webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
            webview.setScrollbarFadingEnabled(false);
           webview.getSettings().setRenderPriority(RenderPriority.HIGH);
            webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
           // webview.getSettings().setBlockNetworkLoads(true);
            webview.getSettings().setBuiltInZoomControls(true); 
            webview.loadUrl("http://googi.com/money/");
            webview.getSettings().setDomStorageEnabled(true);
            webview.getSettings().setDatabaseEnabled(true);
            webview.getSettings().setAppCacheEnabled(true);
            //http://www.inpixelitrust.fr/demos/restaurant_picker/
            //file:///android_asset/index.html
            webview.getSettings().setSupportZoom(false);
             }else{
                  Toast toast = Toast.makeText(MainActivity.this, "No Internet Connection", Toast.LENGTH_LONG);
                  toast.show(); 
             }
           /* webview.setWebChromeClient(new WebChromeClient()
            {
             public void onProgressChanged(WebView view, int progress)
             {
               // update the progressBar
               MainActivity.this.setProgress(progress * 100);
             }
            });*/
            if (!isTaskRoot()) {
                final Intent intent = getIntent();
                final String intentAction = intent.getAction();
                if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
                    finish();
                    return;
                }
            }

            setFullscreen();
        }

        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if(event.getAction() == KeyEvent.ACTION_DOWN){
                switch(keyCode)
                {
                case KeyEvent.KEYCODE_BACK:
                    if(webview.canGoBack() == true){
                        webview.goBack();
                    }else{
                        finish();
                    }
                    return true;
                }

            }
            return super.onKeyDown(keyCode, event);
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
          super.onCreateOptionsMenu(menu);

          menu.add(0, MENU_FULLSCREEN_ON, 0, R.string.menu_fullscreen_on);
          menu.add(0, MENU_FULLSCREEN_OFF, 0, R.string.menu_fullscreen_off);


          return true;
        }
        /**
         * THIS IS FUNCTION FOR CHECKING INTERNET CONNECTION
         * @return TRUE IF INTERNET IS PRESENT ELSE RETURN FALSE
         */
        public boolean checkInternetConnection() {
            ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);

            if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
                return true;

            } else {
                return false;
            }
        }
        @Override
        public boolean onPrepareOptionsMenu(Menu menu)
        {
          super.onPrepareOptionsMenu(menu);

          menu.findItem(MENU_FULLSCREEN_ON).setVisible(!fullscreen);
          menu.findItem(MENU_FULLSCREEN_OFF).setVisible(fullscreen);

          return true;
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item)
        {
          switch (item.getItemId()) {

          case MENU_FULLSCREEN_ON:
            fullscreen = true;
            setFullscreen();
            return true;
          case MENU_FULLSCREEN_OFF:
            fullscreen = false;
            setFullscreen();
            return true;

          }
          return false;
        }
        private void setFullscreen()
        {
          if (fullscreen) {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getWindow().clearFlags(
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
          } else {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getWindow().addFlags(
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
          }

        }
    /*
        @Override
        protected void onNewIntent(Intent intent) {

              setFullscreen();


        }*/
        public class CheckNetwork {


             final String TAG = CheckNetwork.class.getSimpleName();



            public boolean isInternetAvailable(Context context)
            {
                NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

                if (info == null)
                {
                     Log.d(TAG,"no internet connection");
                     return false;
                }
                else
                {
                    if(info.isConnected())
                    {
                        Log.d(TAG," internet connection available...");
                        return true;
                    }
                    else
                    {
                        Log.d(TAG," internet connection");
                        return true;
                    }

                }
            }
                }
        private class MyCustomWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                progress.setVisibility(View.VISIBLE);
              }
              public void onPageFinished(WebView view, String url) {
                progress.setVisibility(View.GONE);
                synchronized (SPLASH_LOCK) {
                    SPLASH_LOCK.notifyAll();
                }
              }
        }

解决方案

You can have below code.

public class CheckNetwork {


    private static final String TAG = CheckNetwork.class.getSimpleName();



    public static boolean isInternetAvailable(Context context)
    {
        NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

        if (info == null)
        {
             Log.d(TAG,"no internet connection");
             return false;
        }
        else
        {
            if(info.isConnected())
            {
                Log.d(TAG," internet connection available...");
                return true;
            }
            else
            {
                Log.d(TAG," internet connection");
                return true;
            }

        }
    }
}

Then in Activity you can use

 if(CheckNetwork.isInternetAvailable(MainActivity.this))
 {
       // do something
 }

Note: This checks for Network Connectivity. You may be connected to wifi but you may not have internet connection available.

这篇关于如何显示没有互联网连接的弹出和一个HTML页面时,网络不可用的WebView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆