2010-12-11 5 views
3

У меня есть приложение, которое пытается стать хорошим самаритян, в основном, когда запускаются какие-либо службы, которые должны взаимодействовать с сетью. Я проверяю, чтобы увидеть, если устройство имеет подключение:Знайте, когда сетевое подключение возвращается

hasConnectivity Метод

private boolean hasConnectivity() { 
    NetworkInfo info = mConnectivity.getActiveNetworkInfo(); 
    boolean connected = false; 
    int netType = -1; 
    int netSubtype = -1; 

    if (info == null) { 
     Log.w(sTag, "network info is null"); 
     notifyUser(MyIntent.ACTION_VIEW_ALL, "There is no network connectivity.", false); 
    } else if (!mConnectivity.getBackgroundDataSetting()) { 
     Log.w(sTag, "background data setting is not enabled"); 
     notifyUser(MyIntent.ACTION_VIEW_ALL, "background data setting is disabled", false); 
    } else { 
     netType = info.getType(); 
     netSubtype = info.getSubtype(); 

     if (netType == ConnectivityManager.TYPE_WIFI) { 
      connected = info.isConnected(); 
     } else if (netType == ConnectivityManager.TYPE_MOBILE 
        && netSubtype == TelephonyManager.NETWORK_TYPE_UMTS 
        && !mTelephonyManager.isNetworkRoaming() 
       ) { 
      connected = info.isConnected(); 
     } else if (info.isRoaming()) { 
      notifyUser(MyIntent.ACTION_VIEW_ALL, "Currently Roaming skipping check.", false); 
     } else if (info.isAvailable()) { 
      connected = info.isConnected(); 
     } else { 
      notifyUser(MyIntent.ACTION_VIEW_ALL, "..There is no network connectivity.", false); 
     } 
    } 
    return connected; 
} 

Когда этот метод возвращает ложь, я знаю, что у меня нет связи, потому что пользователь находится на телефон или 3g и wifi недоступно

Каков наилучший способ узнать, когда доступно подключение, не вытягивая сетевую статистику с помощью таймера?

Есть ли намерение, которое я могу наблюдать с помощью широковещательного приемника, который объявит об изменении с возможностью подключения?

Спасибо за любую помощь, я продолжу поиск документов, чтобы узнать, что делать дальше.

ответ

3

Это то, что у меня есть для проверки доступа к Интернету (на самом деле, больше нравится, если Wi-Fi включен и подключен к сети).

public class ConnectivityReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 

    if(action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) 
    { 
     WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     MainMap.setWifiState(wm.getWifiState()); 
     Log.e("Debug", "Setting wifistate: " + wm.getWifiState()); 
    } else if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) 
    { 
     NetworkInfo ni = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     MainMap.setConnected(ni.isConnected()); 
     Log.e("Debug", "Setting isConnected: " + ni.isConnected()); 
     if(ni.isConnected()) Toast.makeText(context, "Connected!", Toast.LENGTH_LONG).show(); 
    } 
} 

}

Оно не должно быть слишком трудно, чтобы проверить, если пользователь находится в сети 3G или Wi-Fi на.

+0

Спасибо, должно быть, пропустили ConnectivityManager.CONNECTIVITY_ACTION, когда я просматривал документы. Именно это я и надеялся. – Double

+0

Хорошо, что мои часы поиска и проклятия помогли кому-то, кроме меня. – iarwain01

Смежные вопросы