Активное интернет-соединение в подключенной сети - PullRequest
0 голосов
/ 24 мая 2018

У моего приложения есть блок кода, который я хочу проверить в подключенной сети, имеющей активное соединение, прежде чем войти в FireBase Auth Login.

Я создал класс для networkState добавить блоккода для проверки networkActiveConnection

private void networkState() throws IOException {

    final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    assert conMgr != null;
    final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) {

        Toast.makeText(getApplicationContext(),"Network connected",Toast.LENGTH_SHORT).show();

        //checking active internet service

        HttpURLConnection urlc = (HttpURLConnection)(new URL("http://www.google.com").openConnection());
        urlc.setRequestProperty("User-Agent", "Test");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(10000);
        urlc.connect();
        if(urlc.getResponseCode() == 200){

            Toast.makeText(getApplicationContext(), "Network has active internet", Toast.LENGTH_SHORT).show();

            //user login

            signInUser();

        }else {

            Toast.makeText(getApplicationContext(), "No active internet connection", Toast.LENGTH_SHORT).show();
        }

        //end of checking active internet service

    } else {

        Toast.makeText(getApplicationContext(),"Network not connected",Toast.LENGTH_SHORT).show();

    }
}

Приложение продолжает сбой.Я не могу двигаться без решения. Где я пропустил?Есть ли другой способ проверить подключенную сеть с активным подключением?

1 Ответ

0 голосов
/ 05 июня 2018

Наконец я нашел ответ. На самом деле это происходит из-за версии.До Android 3.0 и выше все длительные процессы будут работать только на AsyncTask

. Я реструктурировал фактическое интернет-соединение в устройстве, проверив загрузку Google.com.Я не знаю, что произойдет, когда google.com не работает.

Следующий код может помочь.

@SuppressLint("StaticFieldLeak")
public class activeConnection extends AsyncTask<Void, Void, Boolean> {

    @Override
    protected Boolean doInBackground(Void... params) {

        try {
            URL url = new URL("http://www.google.com");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setConnectTimeout(3000);
            urlc.connect();
            if (urlc.getResponseCode() == 200) {
                return true;
            }
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            return false;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
        return false;
    }

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    protected void onPostExecute(Boolean result) {
        if (!result) { // code if not connected

            AlertDialog.Builder builder = new AlertDialog.Builder(Customers.this, R.style.MyDialogTheme);
            builder.setTitle("ALERT");
            builder.setMessage("Activate your Internet connection and Try again");
            builder.setCancelable(false);

            builder.setPositiveButton(
                    "Retry",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                            new activeConnection().execute();
                        }
                    });


            AlertDialog alert11 = builder.create();
            alert11.show();
        } else { // code if connected


        }
    }
}
...