yrazlik
yrazlik

Reputation: 10777

Android network state change detection takes time

I am trying to detect network state change in my android app. I followed the answer in that question : Check INTENT internet connection

This works, but it takes time for broadcastreceiver to detect changes. When i turn wifi on or off, about 10 seconds later the onReceive() method is called. Why is that taking so much time? Can anyone help?

Thanks

Here is my code:

public class NetworkStateReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Log.d("app", "Network connectivity change");
    if (intent.getExtras() != null) {
        NetworkInfo ni = (NetworkInfo) intent.getExtras().get(
                ConnectivityManager.EXTRA_NETWORK_INFO);
        if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
            Log.i("app", "Network " + ni.getTypeName() + " connected");
            Toast.makeText(context, "CONNECTED", Toast.LENGTH_LONG).show();
        } else if (intent.getBooleanExtra(
                ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
            Toast.makeText(context, "DISCONNECTED", Toast.LENGTH_LONG).show();
            Log.d("app", "There's no network connectivity");
        }
    }

}

}

and in my Manifest's application tag:

<receiver android:name="com.mypackage.NetworkStateReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
</receiver>

Upvotes: 7

Views: 1964

Answers (3)

yrazlik
yrazlik

Reputation: 10777

I found the solution.

Instead of extending BroadcastReceiver class and creating NetworkStateChangeReceiver, i created a broadcastreceiver on my activity and registered it there. Now it works and onReceive() method is triggered immediately.

Upvotes: 6

Dylan Turney
Dylan Turney

Reputation: 85

I have similar code within my app to detect if there's a connection present, and prompt the user of connection state changes.

Within my application, it receives the connection change for disconnect within a second, however when you go to turn the WiFi on it takes around ~7 seconds before my app receives the change in connection state.

However I receive the state change exactly the same time Android makes the toast saying "Connected to Wi-Fi network [your network name]".

Chances are you'd be receiving the change simultaneously from when it connects to a network, and not from when you pushed the Wi-Fi toggle to turn it on.

Is there a particular reason you need that instant feedback from when the toggle is pressed?

Upvotes: 0

user2851150
user2851150

Reputation: 405

public static boolean isInternetAvailable(Context context) {
    boolean isConnection = false;
    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null) {
        NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
        if (info != null) {
            for (int index = 0; index < info.length; index++) {
                if (info[index].getState() == NetworkInfo.State.CONNECTED) {
                    isConnection = true;
                    break;
                }
            }
        }
    }
    return isConnection;
}

Upvotes: 0

Related Questions