我正在为android开发一个应用程序,它需要网络才能从xml文件中检索一些信息。我有这个代码,寻找用户是否启用了网络:
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
return true;
}
return false;
}
我用这种方式使用这个功能:
boolean connected = isOnline();
if(connected)
getLocation();
else
showDialogNetwork();
功能 showDialogNetwork():
public void showDialogNetwork() {
new AlertDialog.Builder(this)
.setMessage("No network")
.setTitle("Error")
.setCancelable(false)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// launch settings
Intent settings = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
startActivity(settings);
}
})
.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
// finish activity
finish();
}
})
.show();
}
如果设备上的网络被禁用, showDialogNetwork()将打开设置菜单中的网络选项卡。但是当用户打开WiFi并且应用程序在后台运行时,它并不“理解”网络已打开。我需要在网络打开后“杀死”应用程序,以从互联网获取信息。如何在应用程序运行期间不断检查网络是否有更改状态?在此先感谢,伙计们:)
答案 0 :(得分:4)
创建一个BroadcastReceiver
,其中IntentFilter
“监听”...
WifiManager.NETWORK_STATE_CHANGED_ACTION
您可以在代码中注册,也可以在清单中注册BroadcastReceiver
,然后对<intent-filter>
android.net.wifi.STATE_CHANGE
请参阅WifiManager.WIFI_STATE_CHANGED_ACTION
要监控移动互联网连接变化,您也会“倾听”......
ConnectivityManager.CONNECTIVITY_ACTION
在这种情况下,在清单中使用以下内容......
android.net.conn.CONNECTIVITY_CHANGE
答案 1 :(得分:1)
您还可以使用TelephonyManager监听数据连接的更改 -
更好的是,注册android.net.conn.CONNECTIVITY_CHANGE广播动作,其中包括wifi,数据等 -
http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
<receiver android:name="com.yourapp.receivers.ConnectionChangeReceiver"
android:label="Connection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>