2

我正在尝试创建一个连接到网络服务器并检索数据的应用程序,我想做一些功能

  1. 当我点击我的应用程序时,首先它检查是否启用了互联网访问?如果启用它会启动应用程序,否则打开互联网访问设置..之后它会重定向到我的应用程序....
  2. 当应用程序连接到 web 服务器时,如果连接不成功,则在特定时间后连接超时。
4

3 回答 3

11

在我的一个应用程序中,我有一个这样定义的类:

    public class ConnectionDetector {

        private Context _context;

        public ConnectionDetector(Context context){
            this._context = context;
        }

        /**
         * Checking for all possible internet providers
         * **/
        public boolean isConnectingToInternet(){
            ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
              if (connectivity != null)
              {
                  NetworkInfo[] info = connectivity.getAllNetworkInfo();
                  if (info != null)
                      for (int i = 0; i < info.length; i++)
                          if (info[i].getState() == NetworkInfo.State.CONNECTED)
                          {
                              return true;
                          }

              }
              return false;
        }
    }

在我需要检查连接状态的活动中,我使用这个:

    // DEFINE THIS AS A GLOBAL VARIABLE
    AlertDialogManager alert = new AlertDialogManager();

onCreate()

    ConnectionDetector cd = new ConnectionDetector(getApplicationContext());
    // Check if Internet present
    if (!cd.isConnectingToInternet()) {
        // Internet Connection is not present
        alert.showAlertDialog(MainActivity.this, "Internet Connection Error",
            "Please connect to working Internet connection", false);
        // stop executing code by return
        return;
    }

哦。差点忘了。如果您还需要将用户重定向到设置面板以激活 Internet,则可以使用这样的 Intent:

您可以在 AlertDialog 中提示用户并让他们选择是否愿意。如果是,请运行这段代码。

Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivity(intent);

编辑:

我错过了明显的(Commonsware 在他的评论中指出了这一点)。

您需要将ACCESS_NETWORK_STATE权限添加到您的清单文件。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-02-17T14:41:13.380 回答
4

您可以使用此方法:

public boolean isConn() {
        ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity.getActiveNetworkInfo() != null) {
            if (connectivity.getActiveNetworkInfo().isConnected())
                return true;
        }
        return false;
    }

并将此权限添加到清单文件:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-02-17T14:41:50.333 回答
2

这是我用来检查互联网连接的功能

// Checks Internet Status
public boolean isOnline() {
    if(cm == null)
        return false;

    final NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED) 
        return true;

    return false;
}

还要将此权限添加到您的清单文件

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

要将用户发送到 WiFi 设置页面,请使用

startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
于 2013-02-17T14:38:39.930 回答