使用碎片检查互联网连接并显示互联网连接错误(底部)

时间:2016-12-15 19:17:24

标签: android android-fragments android-activity

我正在尝试检查android上的活动的互联网连接。我有一个类“ConnectivityReceiver”,它返回网络的当前状态,并在捕获网络更改时返回状态。

我在activity上使用此类的方法。我想要的是,只要方法返回没有互联网连接,BottomSheetDialogFragment应该显示“重试”button。在按下button时,必须关闭Bottom 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 个答案:

答案 0 :(得分: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 {
 //....
}