Search code examples
android-activitysettingswireless

Android Check for Wireless connection upon Returning to Activity from Settings


My Android application is mainly a Webview (labeles WebViewActivity) that navigates a mobile website. I have a connection detector that opens another activity on every URL load if there is no wireless connection. From this next activity there is a button that opens up the Wireless Settings. Upon pressing the back button I would like for the second activity (labeled MainActivity) to refresh itself and continue back to whichever page my Webview had loaded. What do I need to change in the MainActivity.java to execute that?

My MainActivity:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;


    public class MainActivity extends Activity {

// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

 }

@Override
protected void onRestart(){
    if(checkConnection()){
        Intent intent= new Intent(this, WebViewActivity.class);
        startActivity(intent);
    }
}

@Override
// Detect when the back button is pressed
public void onBackPressed() {

    super.onBackPressed();
}




public void openSettings(View view){
    Intent intent= new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
    startActivity(intent);
}

public boolean checkConnection(){
    // creating connection detector class instance
    cd = new ConnectionDetector(getApplicationContext());       
    //Get Internet Status
    isInternetPresent = cd.isConnectingToInternet();

    if(!isInternetPresent)
        return false;

    return true;
}

}

My WebviewActivity:

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebViewActivity extends Activity {

    private WebView mWebView;
    // flag for Internet connection status
    Boolean isInternetPresent = false;
    // Connection detector class
    ConnectionDetector cd;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // TODO Auto-generated method stub

        if (checkConnection()) {
        mWebView = (WebView) findViewById(R.id.activity_main_webview);
         // Enable Javascript
         WebSettings webSettings = mWebView.getSettings();
         webSettings.setJavaScriptEnabled(true);         
         webSettings.setDomStorageEnabled(true);
         mWebView.loadUrl("http://my.fellowshipnwa.org/?publicapp");

        // Force links and redirects to open in the WebView instead of in a browser
         mWebView.setWebViewClient(new myWebClient());
        } else {
            openSplash();
        }

    }

    @Override
    // Detect when the back button is pressed
    public void onBackPressed() {
        if(mWebView.canGoBack()) {
            mWebView.goBack();
        } else {
            // Let the system handle the back button
            new AlertDialog.Builder(this)
            .setTitle("Exit myFellowship App?")
            .setMessage("Are you sure you want to exit?")
            .setNegativeButton(android.R.string.no, null)
            .setPositiveButton(android.R.string.yes, new OnClickListener() {

                public void onClick(DialogInterface arg0, int arg1) {
                    WebViewActivity.super.onBackPressed();
                }
            }).create().show();
        }
    }

    public class myWebClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            if(!checkConnection()){
                openSplash();
                return true;
            }else{
            if( url.startsWith("tel:")){
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));   
                startActivity(intent);
                return true;
            }
            else if( url.startsWith("mailto:")){
                Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url));
                startActivity(intent);
                return true;
            }
            }
            return false;

            }


        } 

    public void openSplash(){
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }

    public boolean checkConnection(){
        // creating connection detector class instance
        cd = new ConnectionDetector(getApplicationContext());       
        //Get Internet Status
        isInternetPresent = cd.isConnectingToInternet();

        if(!isInternetPresent)
            return false;

        return true;
    }

}

Any help is Greatly Appreciated! Even if it means telling me I goofed up on creating this question.

Thank you friends.


Solution

  • I played with it for a while and used a few other examples to piece together something that is working. One small hitch is if the user turns on a connection, but it is not quite connected when they return to the app it will stay on the ConnectorActivity. So I intercept the back button to check for a connection. If present, it will finish the current activity. Then, upon returning to the webview it will reload.

    ConnectorActivity.java:

    @Override
        protected void onRestart(){
            super.onRestart();
            if(checkConnection()){
                finish();
            }
        }
    
        @Override
        // Detect when the back button is pressed
        public void onBackPressed() {
            if(checkConnection()){
                super.onBackPressed();
            }
    
        }
    

    Piece from WebViewActivity.java:

    @Override
    protected void onRestart(){
        super.onRestart();
        mWebView.reload();
    
    }