如何在我的Android应用程序运行时检查网络是否有更改状态?

时间:2012-03-02 21:14:59

标签: java android

我正在为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并且应用程序在后台运行时,它并不“理解”网络已打开。我需要在网络打开后“杀死”应用程序,以从互联网获取信息。如何在应用程序运行期间不断检查网络是否有更改状态?在此先感谢,伙计们:)

2 个答案:

答案 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监听数据连接的更改 -

http://developer.android.com/reference/android/telephony/PhoneStateListener.html#onDataConnectionStateChanged(int

更好的是,注册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>