Vraag Android - Controleer programmatisch de internetverbinding en geef een dialoogvenster weer als dit niet is Verbonden


Ik werk aan een live-project. en wanneer de gebruiker op de app klikt. het welkomstscherm verschijnt (er is een webview op dat scherm). en als internet niet is verbonden, crasht de app. Kort gezegd is mijn probleem om programmatisch te controleren of mobiel verbonden is met internet of niet. zo niet, haal dan de gegevens van webservice niet op in webview en laat een dialoogvenster zien met de tekst "Controleer uw internetverbinding"

tijdens het doen van onderzoek vond ik veel dingen, en ik heb geprobeerd om dat te implementeren. maar het voldoet niet aan mijn vereiste

mijn code is,

public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    else
    {
        Description.setVisibility(View.INVISIBLE);
        new AlertDialog.Builder(WelcomePage.this)
        .setTitle(getResources().getString(R.string.app_name))
        .setMessage(
                getResources().getString(
                        R.string.internet_error))
        .setPositiveButton("OK", null).show();
    }
    return false;
}

ik roep deze functie op doInBackground() van AsyncTask

Help alstublieft!


15
2017-07-26 11:35


oorsprong


antwoorden:


U kunt deze bibliotheek uitchecken:

https://github.com/novoda/merlin

Jij gewoon implement Connectable en je krijgt een terugbelverzoek wanneer het netwerk uitvalt of naar boven komt.

Daarom kunt u uw dialoog in dit scenario weergeven.

U kunt ook de bibliotheek vragen om de huidige status en ervoor kiezen om uw netwerktaak niet te doen

example

Create Merlin (met Merlin.Builder ())

merlin = new Merlin.Builder().withConnectableCallbacks().build(context);

Bind en ontkoppel de service in uw activiteit

@Override
protected void onResume() {
    super.onResume();
    merlin.bind();
}

@Override
protected void onPause() {
    super.onPause();
    merlin.unbind();
}

Registreer voor callbacks

merlin.registerConnectable(new Connectable() {
        @Override
        public void onConnect() {
            // Do something!
        }
});

De MerlinActivity in de demo wordt een eenvoudige manier getoond om Merlin van uw hoofdtoepassingscode te ontdoen.


20
2017-07-26 11:56



Eindelijk kreeg ik het antwoord.

ConnectivityManager conMgr =  ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMgr.getActiveNetworkInfo();
if (netInfo == null){
    Description.setVisibility(View.INVISIBLE);
    new AlertDialog.Builder(WelcomePage.this)
        .setTitle(getResources().getString(R.string.app_name))
        .setMessage(getResources().getString(R.string.internet_error))
        .setPositiveButton("OK", null).show();
}else{
    dialog = ProgressDialog.show(WelcomePage.this, "", "Loading...", true,false);
    new Welcome_Page().execute();
}

12
2017-08-01 12:43



Dit is een eenvoudige functie die uw internetverbinding controleert. Als Connected true retourneert, anders false.

 public boolean isInternetOn() {

        // get Connectivity Manager object to check connection
        ConnectivityManager connec =
                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        // Check for network connections
        if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||
                connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||
                connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||
                connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) {


            return true;

        } else if (
                connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED ||
                        connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) {


            return false;
        }
        return false;
    }
}

Dit is een project dat de internetverbinding controleert en ook de URL controleert die geldig is of die in de server staat deze.


6
2018-05-05 06:51



Ik heb verschillende hierboven beschreven methoden geprobeerd, daarnaast ben ik in sommige gevallen betrapt. Dus ten slotte gebruik ik het onderstaande codefragment om een ​​netwerkoproep te maken ...

try {
    InetAddress address = InetAddress.getByName("www.stackoverflow.com");
    //Connected to working internet connection
} catch (UnknownHostException e) {
    e.printStackTrace();
    //Internet not available
}

Dit kan in veel opzichten nuttig zijn. Als iets niet in orde is, laat het me dan weten.


2
2017-07-20 05:27



Controleer de internetverbinding

 ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo netInfo = mgr.getActiveNetworkInfo();

        if (netInfo != null) {
            if (netInfo.isConnected()) {
                // Internet Available
            }else {
               //No internet
            }
        } else {
            //No internet
        }

2
2018-04-26 12:35



if (InternetConnection.checkConnection(context)) {
    // Internet Available...
} else {
    // Internet Not Available...
}

kopieer gewoon onder de les

public class InternetConnection {

    /** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */
    public static boolean checkConnection(Context context) {
        final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();

        if (activeNetworkInfo != null) { // connected to the internet
            Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show();

            if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                // connected to wifi
                return true;
            } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
                // connected to the mobile provider's data plan
                return true;
            }
        }
        return false;
    }
}

Geef de volgende toestemming om te manifesteren

<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" />

1
2018-03-28 07:51



doInBackground werkt op een ander onderwerp dan de hoofdgebruikersinterface, dus u kunt hier geen dialoogvenster met een dialoogvenster maken. In plaats daarvan negeren onPreExecute in uw AsyncTask, en doe de test daar.


0
2017-07-26 11:38



Internetverbinding checkt ook in onCreate() of onResume() methode. Het AsyncTask hoeft niet te worden aangeroepen.

of U kunt bellen voordat de methode asyncTask execute () wordt aangeroepen

if(isOnline)
{
   MyAsyncTask task=new MyAMyAsyncTask();
   task.execute();

}

else
{
// no internet connection
}

-2
2017-07-26 11:42