簡體   English   中英

互聯網連接改變時自動重新加載 webview

[英]Automatic reload webview when internet connection change

當連接恢復時,我想運行此任務,我想調用 NewortchangeReceiver() 構造函數。 我在 Mainactivity IntentFilter 中寫了“android.net.conn.CONNECTIVITY_CHANGE”,因為“android.net.conn.CONNECTIVITY_CHANGE”在 android N (7) 的 androidmanifest.xml 中不起作用。 我想在互聯網連接改變時自動重新加載 webview。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    wvDailyDarshan = (WebView) findViewById(R.id.wvDailyDarshan);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);

    IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
    context.registerReceiver(new NetworkChangeReceiver(), intentFilter);

    Boolean connection = isNetworkConnected();
    if (connection == false) {
        Snackbar.make(this.getWindow().getDecorView().findViewById(android.R.id.content), "Please check your Internet Connection", Snackbar.LENGTH_SHORT).show();
    } else if (connection == true) {
        wvDailyDarshan.getSettings().setJavaScriptEnabled(true);
        //wvDailyDarshan.loadUrl("http://www.swaminarayanbhagwan.com/daily-darshan/");

        wvDailyDarshan.setWebViewClient(new myWebClient());
        wvDailyDarshan.getSettings().setJavaScriptEnabled(true);
        wvDailyDarshan.getSettings().setBuiltInZoomControls(true);
        wvDailyDarshan.getSettings().setDisplayZoomControls(false);
        wvDailyDarshan.loadUrl("https://www.google.co.in/");
    }

}

我從您的問題中得到的是,您希望在連接發生變化時獲得回調。 所以我會回答這個問題。

網絡變更接收器:

public class NetworkChangeReceiver extends BroadcastReceiver {

    ConnectionChangeCallback connectionChangeCallback;

    @Override
    public void onReceive(Context context, Intent intent) {

        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null
                && activeNetwork.isConnectedOrConnecting();


        if (connectionChangeCallback != null) {
            connectionChangeCallback.onConnectionChange(isConnected);
        }

    }

    public void setConnectionChangeCallback(ConnectionChangeCallback
                                                    connectionChangeCallback) {
        this.connectionChangeCallback = connectionChangeCallback;
    }


    public interface ConnectionChangeCallback {

        void onConnectionChange(boolean isConnected);

    }


}

現在您的 Activity 應該在BraodCastReceiver上調用setConnectionChangeCallback ,即 NetworkChangeReceiver 的對象並提供ConnectionChangeCallback的實現。

這可能看起來像這樣。 活動:

public class YourActivity implments NetworkChangeReceiver.ConnectionChangeCallback
{
@Override
    protected void onCreate(Bundle savedInstanceState) {
        .....
        IntentFilter intentFilter = new 
        IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");

        NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();

        registerReceiver(networkChangeReceiver, intentFilter);

        networkChangeReceiver.setConnectionChangeCallback(this);

    }

    @Override
    public void onConnectionChange(boolean isConnected) {
    if(isConnected){
    // will be called when internet is back
    }
    else{
    // will be called when internet is gone.
    }

    }
}

您可以創建一個新方法,如果未連接互聯網,它將自行調用。 下面是一個粗略的例子。 將其更改為更有效的方式。

private boolean shoudShowSnackbar = true;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    wvDailyDarshan = (WebView) findViewById(R.id.wvDailyDarshan);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);

    IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
    context.registerReceiver(new NetworkChangeReceiver(), intentFilter);

    doThisThingIfFoundInternet();
}

private void doThisThingIfFoundInternet() {
    if (isNetworkConnected()) {
        wvDailyDarshan.getSettings().setJavaScriptEnabled(true);
        //wvDailyDarshan.loadUrl("http://www.swaminarayanbhagwan.com/daily-darshan/");

        wvDailyDarshan.setWebViewClient(new myWebClient());
        wvDailyDarshan.getSettings().setJavaScriptEnabled(true);
        wvDailyDarshan.getSettings().setBuiltInZoomControls(true);
        wvDailyDarshan.getSettings().setDisplayZoomControls(false);
        wvDailyDarshan.loadUrl("https://www.google.co.in/");
    }else{
        if (this.shoudShowSnackbar) {
            Snackbar.make(this.getWindow().getDecorView().findViewById(android.R.id.content), "Please check your Internet Connection", Snackbar.LENGTH_SHORT).show();
            shoudShowSnackbar = !shoudShowSnackbar;
        }
        doThisThingIfFoundInternet();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM