2016-12-15 3 views
0

Я пытаюсь проверить подключение к Интернету для работы в Android. У меня есть класс «ConnectivityReceiver», который возвращает текущее состояние сети и возвращает состояние при захвате сети.Проверьте наличие подключения к Интернету и отобразите ошибку подключения к Интернету с помощью фрагментов (нижние листы)

Я использую методы этого класса на activity. Я хочу, чтобы всякий раз, когда метод возвращает, что нет подключения к интернету, BottomSheetDialogFragment должен появиться с «Повторить» button. При нажатии buttonBottom Sheets dialog должен быть закрыт, а activity будет возобновлен, и снова должна быть проверка на Интернет снова. В принципе, после каждого закрытия я закрываю Bottom Sheets dialog, он должен проверять наличие Интернета.

Класс подключения к Интернету работает нормально, и я проверил его с помощью журналов, и он проверяет каждый раз Network State. Проблема с dialog. Каждый раз, когда я закрываю dialog, он возобновляет activity без проверки доступа в Интернет.

NoInternetConnectivity.java - Класс, который расширяет класс «BottomSheetDialogFragment».

MainActivity.java

public class MainActivity extends AppCompatActivity{ 
    final BottomSheetDialogFragment internetConnectivitySheet = NoInternetConnectivity 
      .newInstance("New Internet Connectivity Bottom Sheet"); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Manually checking internet connection 
     checkConnection(); 
    } 

    /** 
    * Method to check connection on activity resume 
    */ 
    @Override 
    protected void onResume(){ 
     Log.d(LOG_TAG, "onResume()"); 
     MyApplication.getInstance().setConnectivityListener(this); 
     checkConnection(); 
     super.onResume(); 
    } 

    /** 
    * Method to check internet connection in activity. 
    */ 
    private void checkConnection() { 
     Log.d("Check Connection called", "CHECKING CONNECTION..."); 
     if(!internetConnectivitySheet.isAdded() && !ConnectivityReceiver.isConnected()){ 
      internetConnectivitySheet.show(getSupportFragmentManager(), 
        internetConnectivitySheet.getTag()); 
     } else if (internetConnectivitySheet.isAdded()) { 
      internetConnectivitySheet.dismiss(); 
     } else { 
      //internet is connected :-) 
     } 
    } 

    /** 
    * Callback will be triggered when there is change in 
    * network connection 
    */ 
    @Override 
    public void onNetworkConnectionChanged(boolean isConnected) { 
     Log.d("On Network Change Called", "CHECKING CONNECTION..."); 
     if(!internetConnectivitySheet.isAdded() && !isConnected){ 
      internetConnectivitySheet.show(getSupportFragmentManager(), 
        internetConnectivitySheet.getTag()); 
     } else if (internetConnectivitySheet.isVisible()) { 
      internetConnectivitySheet.dismiss(); 
     } else { 
      //internet is connected :-) 
     } 
    }  
} 

При проверке журналов, когда я закрываю dialog, деятельность не становится возобновлена. Что происходит, и как это исправить?

+1

Вы деятельность не должна быть приостановлена ​​при добавлении новый фрагмент. Таким образом, вы не должны получать onResume, когда вы удаляете фрагмент. – Distwo

+1

Вам необходимо определить, когда изменилось состояние диалогового окна вашего нижнего листа, установив 'BottomSheetBehavior.BottomSheetCallback' и вызывая' checkConnection() 'в это время. – Distwo

+0

@ Distwo да, я получаю это. Я не получаю журналы, что активность возобновляется, поэтому я считаю, что активность не возобновляется, и именно поэтому это происходит. Можете ли вы помочь, как сделать то, что вы говорите? –

ответ

0

Эта операция не будет приостановлена ​​с помощью этого подхода, если вы хотите, чтобы поток приостановки/возобновления активности выполнялся, вы можете создать собственное диалоговое окно вместо фрагмента, на мой взгляд, это чистое решение. Есть много сообщений на этом How to create a Custom Dialog box in android? https://developer.android.com/guide/topics/ui/dialogs.html

Однако, если вы хотите сохранить текущую реализацию вам нужно только позвонить чек после увольнения фрагмент

public void onNetworkConnectionChanged(boolean isConnected) { 
//... 
    } else if (internetConnectivitySheet.isVisible()) { 
     internetConnectivitySheet.dismiss(); 
    checkConnection(); 
    } else { 
//.... 
} 
Смежные вопросы