egydeveloper
egydeveloper

Reputation: 585

No internet connection

I had this error when testing my new app on android device "No internet connection" although I have good network connection also internet window prompt to choose the browser to navigate the app and I didnot need this window to appear

manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.elarabygroup"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />



    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".ElarabyGroup"
            android:label="@string/title_activity_elaraby_group" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
<!-- 
        <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name=".ElarabyGroup" />
            </intent-filter>
        </receiver>

        <service android:name=".GCMIntentService" />
        -->
    </application>

</manifest>

Activity

package com.example.elarabygroup;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import com.google.android.gcm.GCMRegistrar;

public class ElarabyGroup extends Activity {
    private String TAG;
    private String SENDER_ID = "222874571774";
    private WebView webView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_elaraby_group);
        /*
        GCMRegistrar.checkDevice(this);
        GCMRegistrar.checkManifest(this);

        final String regId = GCMRegistrar.getRegistrationId(this);
        if (regId.equals("")) {
            GCMRegistrar.register(this, SENDER_ID);
        } else {
            Log.v(TAG, "Already registered");
        }
*/
        try {

            ConnectivityManager con = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

            if (con.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
                    || con.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                // builder.setMessage(con.getActiveNetworkInfo().getState().toString());
                builder.setMessage("No Internet connection");
                AlertDialog alert = builder.create();
                alert.show();

            }

            else

            {

                webView = (WebView) findViewById(R.id.webView1);
                webView.getSettings().setJavaScriptEnabled(true);
                webView.loadUrl("http://google.com");
            }

        } catch (Exception e) {

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            // builder.setMessage(con.getActiveNetworkInfo().getState().toString());
            builder.setMessage(e.getMessage().toString());

            AlertDialog alert = builder.create();
            /* alert.show(); */

            // String url =
            // "http://beta.elarabygroup.com/bug?bug="+e.getMessage().toString();
            String url = "http://google.com/";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);

        }

    }

}
/*
 * @Override public boolean onCreateOptionsMenu(Menu menu) {
 * getMenuInflater().inflate(R.menu.activity_elaraby_group, menu); return true;
 * } }
 */

Upvotes: 2

Views: 918

Answers (2)

Pratik Butani
Pratik Butani

Reputation: 62391

First, you need permission to know whether the device is connected to the web or not. This needs to be in your manifest, in the element:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

then

ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

if (connec != null && (connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){ 
    //You are connected, do something online.
}else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||  connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) {             
    //Not connected.        
    Toast.makeText(getApplicationContext(), "You must be connected to the internet", Toast.LENGTH_LONG).show();
} 

the 1 and 0 in the getNetworkInfo() represent Wifi, and 3g/edge I forget which is which but I know this code checks correctly.

Upvotes: 1

Raghav Sood
Raghav Sood

Reputation: 82533

The problem lies in the following condition:

 if (con.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
                || con.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {

Android only allows you to connect to one type of network at a time, and by default wifi takes priority over mobile data whenever the screen is on. So if you turn in wifi, the mobile network will be disconnected from automatically, and when wifi is off, it is obviously not connected.

What your if statement is doing is "if either the mobile network or the wifi is off, show the error dialog". Since this will return true every time, you are having a problem. Instead, try using:

 if (con.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
                && con.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {

Upvotes: 0

Related Questions