diff --git a/res/values/strings.xml b/res/values/strings.xml
index 80e9b03..3db6ea7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1090,4 +1090,5 @@
     <string name="network_switch_remind_type">wifi_browser_interaction_remind</string>
     <!-- Toast message displayed when the full screen received message -->
     <string name="received_message_full_screen">Receive a message from: <xliff:g id="FROM">%s</xliff:g>.</string>
+    <string name="acivity_not_found">Activity Not Found to Handle Intent <xliff:g id="NOACTIVITY">%s</xliff:g>.</string>
 </resources>
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index b1df847..fddb0fe 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import android.app.Activity;
+import android.app.ActivityManagerNative;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DownloadManager;
@@ -46,6 +47,7 @@
 import android.net.http.SslError;
 import android.net.WebAddress;
 import android.net.wifi.WifiManager;
+import android.net.wifi.ScanResult;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Environment;
@@ -126,7 +128,8 @@
             "android.net.wifi.cmcc.WIFI_SELECTION_DATA_CONNECTION";
     private static final String OFFLINE_PAGE =
             "content://com.android.browser.mynavigation/websites";
-
+    private static final String INTENT_PICK_NETWORK =
+            "android.net.wifi.cmcc.PICK_WIFI_NETWORK_AND_GPRS";
     // public message ids
     public final static int LOAD_URL = 1001;
     public final static int STOP_LOAD = 1002;
@@ -869,17 +872,33 @@
             if (mNetworkInfo == null
                     || (mNetworkInfo != null && (mNetworkInfo.getType() !=
                     ConnectivityManager.TYPE_WIFI))) {
-                int isReminder = Settings.System.getInt(
-                        mActivity.getContentResolver(),
-                        this.getContext().getResources()
-                                .getString(R.string.network_switch_remind_type),
-                        networkSwitchTypeOK);
-
-                if (isReminder == networkSwitchTypeOK) {
-                    Intent intent = new Intent(
-                            INTENT_WIFI_SELECTION_DATA_CONNECTION);
-                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                    this.getContext().startActivity(intent);
+                List<ScanResult> list = wifiMgr.getScanResults();
+                if (list != null && list.size() == 0) {
+                    int isReminder = Settings.System.getInt(
+                            mActivity.getContentResolver(),
+                            this.getContext().getResources()
+                                    .getString(R.string.network_switch_remind_type),
+                            networkSwitchTypeOK);
+                    if (isReminder == networkSwitchTypeOK) {
+                        Intent intent = new Intent(
+                                INTENT_WIFI_SELECTION_DATA_CONNECTION);
+                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                        this.getContext().startActivity(intent);
+                    }
+                } else {
+                    if (ActivityManagerNative.isSystemReady()) {
+                        try {
+                            Intent intent = new Intent(INTENT_PICK_NETWORK);
+                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                            this.getContext().startActivity(intent);
+                        } catch (Exception e) {
+                            String err_msg = this.getContext().getString(
+                                    R.string.acivity_not_found, INTENT_PICK_NETWORK);
+                            Toast.makeText(this.getContext(), err_msg, Toast.LENGTH_LONG).show();
+                        }
+                    } else {
+                        Log.e(LOGTAG, "System is not ready!");
+                    }
                 }
                 mNetworkShouldNotify = false;
             }
