На высоком уровне решение должно выглядеть следующим образом, с моей точки зрения f:
Создать приемник для получения широковещательных сообщений, изменяющих связь. Это должно выглядеть следующим образом
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
if(checkInternet(context))
{
Log.d("InternetLog", "Network Available Do operations",Toast.LENGTH_LONG);
//Do your background task here
}
}
boolean checkInternet(Context context) {
ServiceManager serviceManager = new ServiceManager(context);
if (serviceManager.isNetworkAvailable()) {
return true;
} else {
return false;
}
}
}
Обязательно зарегистрируйте его также в манифесте
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />.
</intent-filter>
</receiver>
- После того, как это будет сделано, ваше приложение готово проснуться при изменении подключения.
- Я рекомендую использовать некоторые фоновые задачи для передачи данных на сервер, вам нужно взглянуть на компонент служб или Диспетчер работы
- В зависимости от того, какой способ вы выберете, просто внедрите внутреннюю логику подключения 1045 * и запустите фоновую задачу в приемнике, просто замените комментарий пропер-кодом
Обновление
В качестве альтернативы, вместо ServiceManager
вы можете использовать этот метод
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Вы будете также необходимо в вашем манифесте
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />