如何检查wifi/3g是否启用?
我有一个提供RSS新闻的按钮。我的问题是,如果wifi被禁用或没有3G连接,我想提出一个“没有互联网连接”的烤面包信息。我必须让它工作,如果wifi关闭弹出消息,但我的问题是:如何检查wifi/3g是否启用?
我想让应用程序检查用户是否启用了wifi或3G连接。如果有3克去新的活动,如果有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);
}
根据您使用的HTTP API,如果出现IOException或类似情况,应该显示该消息(HttpClie nt例如)。这样您就不会对Wifi管理员和相关服务进行不必要的额外呼叫。
如果您不能获取RSS,那么用户没有数据服务(Wifi或3G)。
检测3g或wifi是否启用是比较复杂的。即使“3g已启用”,非常低的信号也可能阻止应用程序获取Feed。与wifi相同(是公共热点吗?是否通过防火墙?
Ping您的服务器并设置超时。如果您没有在设定的时间内得到响应(比如1-5秒),然后显示烤面包,或更好的按钮来修改无线设置(http://developer.android.com/reference/android/provider/Settings.html#ACTION_WIRELESS_SETTINGS)
为了检查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;
}
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();
}
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"));
欢迎来到SO。如果您要发布已接受并且已获得最佳答案的旧问题的答案,应该是因为接受的答案不正确,或者因为您添加了以前答案中未涵盖的重要新信息。 – 2012-10-02 16:31:48
谢谢队友!我已经修好了 – kostas 2011-04-25 20:35:54