如何检查wifi / 3g是否启用?

时间:2011-04-25 20:17:31

标签: android

我有一个提示RSS新闻的按钮。我的问题是,如果禁用wifi或没有3g连接,我想提出一个“没有互联网连接”的祝酒消息。如果关闭wifi以弹出消息,我必须使其工作但我的问题是:

  

我希望应用程序检查用户是否启用了wifi或3g连接。如果有3g要进行新活动,如果有wifi检查不仅是否已启用但是如果用户已连接到网络然后转到新活动。如果3g或wifi被禁用,我只想呈现我之前写的消息。

这是我现在编写的代码,但我真的不知道如何继续......

清单:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

我的onCreate方法的来源:

@Override 
public void onCreate(Bundle icicle) 
{ 
        super.onCreate(icicle);
        setContentView(R.layout.main2);

        wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);

        if (wifiManager.isWifiEnabled()) 
        {

            wifiManager.setWifiEnabled(true); // an einai anoixto asto anoixto
        } 
        else 
        {

            Toast.makeText(nea.this, "Χρειάζεστε σύνδεση στο internet", Toast.LENGTH_SHORT).show();
            finish();
        }

        loadFeed(ParserType.DOM);
    }

5 个答案:

答案 0 :(得分:9)

ConnectivityManager conMan = ((ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE));
boolean isWifiEnabled = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isAvailable();
boolean is3GEnabled = !(conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED
                        && conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getReason().equals("dataDisabled"));

答案 1 :(得分:3)

仅检测3g或wifi是否启用更复杂。即使“3g已启用”,极低的信号也可能阻止应用程序获取Feed。与wifi相同(是公共热点吗?它是否通过防火墙?

Ping您的服务器并设置超时。如果你没有在一段时间内得到答复(假设1-5秒),那么就显示吐司,或者更好的按钮来修改无线设置(http://developer.android.com/reference/机器人/提供者/ Settings.html#ACTION_WIRELESS_SETTINGS)

答案 2 :(得分:2)

如果存在IOException或类似信息,则应根据您正在使用的HTTP API(例如HttpClient)显示该消息。这样您就不会对Wifi管理器和相关服务进行不必要的额外调用。

如果您无法获取RSS,则该用户没有数据服务(Wifi或3G)。

答案 3 :(得分:2)

要检查是否启用了3g,您也可以使用以下代码。但如果网络不支持3g,则返回false。

int type = telephonymanager.getNetworkType();

if (type == TelephonyManager.NETWORK_TYPE_HSDPA
    || type == TelephonyManager.NETWORK_TYPE_HSPA
    || type == TelephonyManager.NETWORK_TYPE_HSUPA
    || type == TelephonyManager.NETWORK_TYPE_UMTS
    || type == TelephonyManager.NETWORK_TYPE_EVDO_0
    || type == TelephonyManager.NETWORK_TYPE_EVDO_A) {

    Toast.makeText(RemoteService.this, "network type " + type, Toast.LENGTH_SHORT).show();
    threegmode = true;
}
else {
    threegmode = false;
}

答案 4 :(得分:0)

private static boolean isConnected(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = null;
        if (connectivityManager != null) {

            networkInfo = connectivityManager
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

            if (!networkInfo.isAvailable()) {
                networkInfo = connectivityManager
                        .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            }
        }
        return networkInfo == null ? false : networkInfo.isConnected();
    }