Проверка интернет-соединения с сервисом на андроиде

Я знаю, как проверить подключение к Интернету, когда мое приложение открыто с помощью активности. Но как проверить возможность подключения в службе, когда мое приложение не запущено?


person S.M_Emamian    schedule 10.03.2014    source источник
comment
зачем использовать сокет, когда система предоставляет средства для проверки сеть подключена или нет   -  person panini    schedule 11.03.2014
comment
Используйте широковещательный приемник, зарегистрируйте его в манифесте и передайте в свою службу данные о состоянии сети, измененном в методе onReceive этого широковещательного приемника.   -  person Adnan    schedule 11.03.2014


Ответы (3)


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

Пример:

Манифест:

Разрешения:

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

Зарегистрируйте широковещательный приемник:

<receiver android:name=".ConnectivityChangeReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

Создать класс получателя:

public class ConnectivityChangeReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        // Explicitly specify that which service class will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(),
                YourService.class.getName());
        intent.putExtra("isNetworkConnected",isConnected(context));
        startService(context, (intent.setComponent(comp)));
    }

 public  boolean isConnected(Context context) {
           ConnectivityManager connectivityManager = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE));
           NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
           return networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected();
   }

}

Ваш класс обслуживания:

class YourService extends IntentService{

    @Override
    protected void onHandleIntent(Intent intent) {
      Bundle extras = intent.getExtras();
      boolean isNetworkConnected = extras.getBoolean("isNetworkConnected");
      // your code

   }

}
person Adnan    schedule 10.03.2014


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

public boolean isConnectingToInternet(Context _context){
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivity != null)
          {
              NetworkInfo[] info = connectivity.getAllNetworkInfo();
              if (info != null)
                  for (int i = 0; i < info.length; i++)
                      if (info[i].getState() == NetworkInfo.State.CONNECTED)
                      {
                          return true;
                      }

          }
          return false;
    }
person Sanket Patel    schedule 10.03.2014
comment
Это не отвечает на вопрос. ОП сказал, что знает, как это сделать, когда приложение не открыто. - person codeMagic; 11.03.2014
comment
это не мой ответ!!! Я знаю, когда мое приложение открыто, как проверить, доступен ли Интернет или нет в действии - person S.M_Emamian; 11.03.2014
comment
Я обновил ответ. Вы можете использовать эту функцию в службах Android. Вам нужно создать службу и запустить ее. Вам может потребоваться обработка широковещательных приемников для обработки автоматического запуска службы после перезапуска устройства и т. д. - person Sanket Patel; 11.03.2014