Я знаю, как проверить подключение к Интернету, когда мое приложение открыто с помощью активности. Но как проверить возможность подключения в службе, когда мое приложение не запущено?
Проверка интернет-соединения с сервисом на андроиде
Ответы (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
}
}
Система предоставляет Broadcast при изменении сетевого подключения, которое можно прочитать с помощью BroadcastReceiver< /а>. Это будет вызываться независимо от того, открыто ваше приложение или закрыто.
Используя приведенный ниже код, вы можете проверить, подключено ли устройство к Интернету или нет. Вы можете использовать эту функцию в любое время, когда пытаетесь вызвать любой веб-сервис или любую задачу, связанную с Интернетом. Вы можете использовать эту функцию в службе 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;
}