2012-03-02 1 views
0

Я создаю приложение для Android, которому нужна сеть, чтобы получить некоторую информацию из XML-файла. У меня этот код, который ищет, если пользователи позволило сети:Как проверить, имеет ли сеть состояние изменения во время выполнения моего приложения для Android?

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() откроет вкладку сети в меню настроек. Но когда пользователи включают Wi-Fi, и приложение работает в фоновом режиме, оно не «понимает», что сеть включена. Мне нужно «убить» приложение после включения сети, чтобы получить информацию из Интернета. Как я могу постоянно проверять, изменилось ли состояние сети во время выполнения моего приложения? Заранее спасибо, ребята :)

ответ

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

Вы также можете прослушать измененные данные Подключение с помощью TelephonyManager -

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

Еще лучше, зарегистрировать android.net.conn.CONNE Действие вещания CTIVITY_CHANGE который включает в себя Wi-Fi, данные и т.д. -

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> 
Смежные вопросы