0

I wanted to know how to detect when the user has enabled the data connection, but only when my Application sends the user to the Network Data Settings Screen. And perform the rest of the operations thereafter... Not before that.

I have seen a few examples before related to the same topic but could not find a clear and working answer.

Please any kind of help is highly appreciated...

2 Answers2

0

I think you should go for a Flag in the SharedPreferences, so when the user ist taken to the Data Settings you save the flag=true and then check for the changes in the conectivity as in this thread

Community
  • 1
  • 1
Alejandro Cumpa
  • 2,118
  • 1
  • 24
  • 45
  • Actually I was thinking of another approach like answered here http://stackoverflow.com/a/27176118/3969414 but I could not really figure out how to implement it... – Abhinab Das Apr 16 '15 at 18:09
0

As in the post you mentioned you should listen for a flag then register your receiver to listen to a data connection then unregister it in onDestroy, Could be done like this:

NetworkStateReceiver:

public class NetworkStateReceiver extends BroadcastReceiver {

protected List<NetworkStateReceiverListener> listeners;
protected Boolean connected;

public NetworkStateReceiver() {
    listeners = new ArrayList<NetworkStateReceiverListener>();
    connected = null;
}

public void onReceive(Context context, Intent intent) {
    if(intent == null || intent.getExtras() == null)
        return;

    ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo ni = manager.getActiveNetworkInfo();

    if(ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
        connected = true;
    } else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
        connected = false;
    }

    notifyStateToAll();
}

private void notifyStateToAll() {
    for(NetworkStateReceiverListener listener : listeners)
        notifyState(listener);
}

private void notifyState(NetworkStateReceiverListener listener) {
    if(connected == null || listener == null)
        return;

    if(connected == true)
        listener.networkAvailable();
    else
        listener.networkUnavailable();
}

public void addListener(NetworkStateReceiverListener l) {
    listeners.add(l);
    notifyState(l);
}

public void removeListener(NetworkStateReceiverListener l) {
    listeners.remove(l);
}

public interface NetworkStateReceiverListener {
    public void networkAvailable();
    public void networkUnavailable();
}

}

First when sending to networksettings screen:

Intent i = new Intent(this,NetworkSettingsActivity.class);
i.putExtra("ACTIVATE_RECEIVER", true);
startActivity(i);

Then when receiving in NetworkSettingsActivity:

public class NetworkSettingsActivity extends Activity{
    NetworkStateReceiver receiver;

    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }
    protected void onCreate(Bundle savedInstanceState){
        if (getIntent().getBooleanExtra("ACTIVATE_RECEIVER", false)){
         receiver = new NetworkStateReceiver();
         receiver.addListener(new NetworkStateReceiver.NetworkStateReceiverListener() {
             @Override
             public void networkAvailable() {
                 //do something
             }

             @Override
             public void networkUnavailable() {
                //do something else
             }
         });
         registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
     }
    }
}

Hope I could be of any help, Good Luck :)...

Eefret
  • 4,724
  • 4
  • 30
  • 46