Как постоянно проверять подключение к интернету во время работы приложения - PullRequest
1 голос
/ 01 апреля 2019

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

public class isNetworkAvailable extends Activity  {
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_is_network);
       ;
            if(!isNetworkAvailable()){
                //Create an alert dialog
                AlertDialog.Builder Checkbuilder = new  AlertDialog.Builder(isNetworkAvailable.this);
                Checkbuilder.setIcon(R.drawable.error);
                Checkbuilder.setTitle("Error!");
                Checkbuilder.setMessage("Check Your Internet Connection.");
                //Builder Retry Button

                Checkbuilder.setPositiveButton("Retry", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        //Restart The Activity
                        Intent intent = getIntent();
                        finish();
                        startActivity(intent);

                    }
                });

                Checkbuilder.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                }) ;

                AlertDialog alert=Checkbuilder.create();
                alert.show();

            }



            else {
                if (isNetworkAvailable()){

                    Thread tr=new Thread(){
                        public  void  run(){
                            try {
                                sleep(4);
                            }
                            catch (Exception e){
                                e.printStackTrace();
                            }
                            finally {
                                Intent i = new Intent(isNetworkAvailable.this,MainActivity.class);
                                startActivity(i);

                                finish();
                            }}};tr.start();}}}private boolean isNetworkAvailable(){
            ConnectivityManager connectivityManager=(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
            return activeNetworkInfo !=null;

        }
    }

Ответы [ 4 ]

1 голос
/ 01 апреля 2019

Используйте файл BroadCast Receiver Create Class и зарегистрируйте его в AndroidManifest.xml в качестве получателя и расширяет класс BroadcastReceiver.

AndroidManifest.xml

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

И в методе onReceive () используйте следующий метод:проверить подключение к интернету.

public boolean isOnline(Context context) {

    ConnectivityManager cMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo nInfo = cMan.getActiveNetworkInfo();
    return (nInfo != null && nInfo.isConnected());
}
0 голосов
/ 01 апреля 2019

Использование ReactiveNetwork lib

ReactiveNetwork - это состояние прослушивания сетевого подключения библиотеки Android и подключение к Интернету. Библиотека поддерживает как новые, так и устаревшие стратегии мониторинга сети. Мин версия SDK = 9

Использование

добавить это в gradle

dependencies {
  implementation 'com.github.pwittchen:reactivenetwork-rx2:3.0.2'
}

и в вашей деятельности

ReactiveNetwork.observeInternetConnectivity()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(isConnectedToInternet -> {
                    // do something with isConnectedToInternet value

                    changeOnlineStatus(isConnectedToInternet ? ConnectionQuality.EXCELLENT : ConnectionQuality.POOR);
                });

it Постоянно наблюдать за подключением к Интернету

для получения дополнительной информации ссылка

0 голосов
/ 01 апреля 2019

Попробуйте: добавьте этот код в OnCreate()

 /*--Check Connectivity--*/
        getApplicationContext().registerReceiver(mConnReceiver,
                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

Вызовите этот метод

   /*--Check Connectivity--*/
    private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
          /*  boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
            boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);*/

            NetworkInfo currentNetworkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            //   NetworkInfo otherNetworkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

            if (currentNetworkInfo.isConnected()) {
                if (check)
                    Snackbar.make(viewPager, "Connected :) ", Snackbar.LENGTH_LONG).show();
            } else {
                //Toast.makeText(WikiSnapActivity.this, "Not Connected", Toast.LENGTH_LONG).show();
                Snackbar.make(viewPager, "No Internet :( ", Snackbar.LENGTH_INDEFINITE).show();
                check = true;
            }
        }
    };
0 голосов
/ 01 апреля 2019

Вы можете использовать ScheduledExecutorService, чтобы запланировать действие, которое будет происходить через регулярные интервалы в фоновом потоке.проверять каждую секунду:

public boolean isInternetAvailable() {
    try {
        InetAddress ipAddr = 
 InetAddress.getByName("google.com");
            return !ipAddr.equals("");
        } catch (Exception e) {
            return false;
    }
}

Как:

ScheduledExecutorService scheduler =
 Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
      (new Runnable() {
         public void run() {
            //above method
         }
      }, 0, 1, TimeUnit.SECONDS);

запустить службу и сделать это.

...