Reputation: 585
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
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
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