1

我已经搜索了这个,但我无法解决问题,请查看在其他示例中检查的此代码:

public class EntryActivity extends Activity {

public Boolean isNetAvailable(Context con)  {

    try{
        ConnectivityManager connectivityManager = (ConnectivityManager)       
                                                                  con.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        NetworkInfo mobileInfo =connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        if (wifiInfo.isConnected() || mobileInfo.isConnected()) {
            return true;
        }
    }
    catch(Exception e){
       e.printStackTrace();
    }
    return false;

当我在onCreate方法中调用它时,此方法效果很好,如下所示:

if (isNetAvailable(getApplicationContext())) {
        Toast.makeText(EntryActivity.this,
            "You have Internet Connection, wait a moment to sincronize" +
            "Metar's stations", Toast.LENGTH_LONG)
               .show();
         Intent myIntent = new Intent(this, MainActivity.class);
         startActivity(myIntent);

    } else {
        Toast.makeText(EntryActivity.this,
            "You Do not have Internet Connection",
                Toast.LENGTH_LONG).show();

        EntryActivity.this.startActivity(new Intent(
                Settings.ACTION_WIRELESS_SETTINGS));
            }

这仅适用于第一次 Internet 连接检查!问题是,如果 Wifi 关闭,用户应该离开应用程序或打开 Wi-Fi。但是,如果他打开它,我将无法访问该更改,也无法进行其他活动。因此,如果在开始时互联网连接状态已关闭,我想继续检查用户是否将其打开以推进其他活动。我能做些什么?

4

3 回答 3

0

您无需通过定期执行代码来不断检查 Internet 连接更改。相反,您需要在应用程序中定义广播接收器来监听网络变化。

查看此答案 如何在 Android 中监控网络连接状态?

于 2013-04-10T11:49:49.807 回答
0

在你的 android 清单中:

<receiver android:name="com.softteco.clivero.receivers.ConnectionReceiver" >
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

并创建类:

public class ConnectionReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        boolean newConnectionState = isConnected(context);
    }
    private boolean isConnected(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
        boolean ifConnected = false;
        for (int i = 0; i < info.length; i++) {
            NetworkInfo connection = info[i];
            if (connection.getState().equals(NetworkInfo.State.CONNECTED)) {
                ifConnected = true;
            }
        }
        return ifConnected;
    }

}

这是可能的变体之一。希望它会帮助你。

于 2013-04-10T11:50:28.567 回答
0

这可以帮助您监控网络连接 Wi-Fi、GPRS、UMTS 等

public boolean isNetworkAvailable(Context context)
    {
        ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = manager.getActiveNetworkInfo();
        return info!=null;
    }

还要确保您在Manifest文件中添加了需要权限,例如

    <uses-permission android:name="android.permission.INTERNET" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    </uses-permission>
于 2013-04-10T11:53:41.630 回答