Как предотвратить нажатие на URL при отсутствии подключения к интернету - android studio - PullRequest
0 голосов
/ 28 сентября 2019

Я использую Android Studio для конвертации моего сайта в приложение для Android.Я пытаюсь показать диалоговое окно, когда нет подключения к Интернету при открытии.Работает нормально.

Но проблема в том, что приложение все еще работает и вдруг нет подключения к интернету.Затем, если я нажму на ссылку, на веб-экране отобразится «Веб-страница недоступна».

Web page not available

MainActivity.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();
        }
    }
}

DetectConnection.java

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());
    }
}

Я хочу знать, как предотвратить нажатие кнопки, когда соединение не обнаружено, заменив страницу по умолчанию «Веб-страница недоступна» диалоговым окном «Нет».Интернет, проверь свою связь! "Есть идеи?

Ответы [ 3 ]

0 голосов
/ 28 сентября 2019

Первый:

В вашем методе onClick сначала проверьте, доступен ли Интернет, или нет

добавьте этот метод в свою деятельность:

  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();
        }

Секунда: Если вы спрашиваете о -

  1. вы используете приложение

  2. подключение к Интернету включено

  3. НО нет ответа от сервера [Нет интернета]

, затем используйте тайм-аут в своем веб-просмотре. этот ответ

0 голосов
/ 28 сентября 2019

Проверьте эти два метода, нажимая время. Если сеть доступна, выполните действия

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" />
0 голосов
/ 28 сентября 2019

Ваш класс 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;
  }
}

Проверьте подключение к Интернету внутри shouldOverrideUrlLoading.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...