Как отправить мои данные, когда пользовательское устройство подключено к сети - PullRequest
1 голос
/ 07 апреля 2020

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

1 Ответ

1 голос
/ 08 апреля 2020

На высоком уровне решение должно выглядеть следующим образом, с моей точки зрения 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" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...