我有一个提示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);
}
答案 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();
}