2016-03-03 3 views
1

Я нашел много тем, как проверить доступ в Интернет. Но я не могу понять, как сделать это динамически. Например, я отправляю запрос (он будет работать в другом потоке), и устройство теряет интернет-соединение. Как я могу отменить свой запрос на это мероприятие?Как проверить доступ в Интернет в режиме реального времени?

+1

Вы можете использовать фоновое обслуживание для постоянного мониторинга вашего интернет-соединения. Это может иметь некоторый эффект. Если вы делаете сетевой запрос, вы можете также установить тайм-аут, если после этого ответа нет, запрос будет отменен. – Inducesmile

+0

Просто я думаю, что если я установил короткий тайм-аут, когда пользователь с плохой скоростью соединения может иметь ошибку, хотя устройство будет иметь доступ в Интернет. Или я ошибаюсь? –

+1

Затем вы должны проверить, сколько раз разная скорость соединения будет отвечать, теперь у вас есть эталон. Я думаю, что это может быть лучше, если использовать фоновый сервис, работающий непрерывно. – Inducesmile

ответ

1

Вот что-то, что я приготовил раньше; может быть, это поможет:

public class NetworkStateMonitor extends BroadcastReceiver { 
    public interface Listener { 
     void onNetworkStateChange(boolean up); 
    } 
    Context  mContext; 
    boolean  mIsUp; 

    public 
    NetworkStateMonitor(Context context) { 
     mContext = context; 
     //mListener = (Listener)context; 
     IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
     context.registerReceiver(this, intentFilter); 
     mIsUp = isUp(); 
    } 
    public void 
    unregister() { // call this when finished with it, and no later than onStop(): callback will crash if app has been destroyed 
     mContext.unregisterReceiver(this); 
    } 
    public boolean 
    isUp() {  // can be called at any time 
     ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo!=null && activeNetworkInfo.isConnectedOrConnecting(); 
    } 
    @Override public void 
    onReceive(Context context, Intent intent) {  // registerReceiver callback, passed to mListener 
     boolean upNow = isUp(); 
     if (upNow == mIsUp) return;  // no change 
     mIsUp = upNow; 
     ((Listener)mContext).onNetworkStateChange(mIsUp); 
    } 
} 
+0

Спасибо! Это лучшее решение для меня! –

0

вы можете использовать менеджер подключения

ConnectivityManager cm = 
      (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    boolean isConnected = activeNetwork != null && 
        activeNetwork.isConnectedOrConnecting(); 
1

это мое предположить, этот метод вызывается в функции, чтобы получить знают, что Интернет доступны или нет

private boolean isNetworkConnected() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

    return cm.getActiveNetworkInfo() != null; 
} 

в ваши проявления

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

или вы можете поместить метод в родительскую активность или фрагмент (условный).

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