互联网连接更改时自动重新加载 webview
Automatic reload webview when internet connection change
当连接恢复时,我想 运行 这个任务,我想调用 NewortchangeReceiver() 构造函数。我在 Mainactivity IntentFilter 中写了 "android.net.conn.CONNECTIVITY_CHANGE" 因为 "android.net.conn.CONNECTIVITY_CHANGE" not work in androidmanifest.xml in android N (7)。我想在 internet 连接更改时自动重新加载 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/");
}
}
您可以创建一个新方法,它会在未连接互联网时自行调用。下面是一个粗略的例子。将其更改为更有效的方式。
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();
}
}
我从你的问题中得到的是,你希望在连接发生变化时获得回调。
所以我会回答这个问题。
NetworkChangeReceiver:
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 的实现。
可能看起来像这样。
Activity:
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.
}
}
}
当连接恢复时,我想 运行 这个任务,我想调用 NewortchangeReceiver() 构造函数。我在 Mainactivity IntentFilter 中写了 "android.net.conn.CONNECTIVITY_CHANGE" 因为 "android.net.conn.CONNECTIVITY_CHANGE" not work in androidmanifest.xml in android N (7)。我想在 internet 连接更改时自动重新加载 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/");
}
}
您可以创建一个新方法,它会在未连接互联网时自行调用。下面是一个粗略的例子。将其更改为更有效的方式。
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();
}
}
我从你的问题中得到的是,你希望在连接发生变化时获得回调。 所以我会回答这个问题。
NetworkChangeReceiver:
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 的实现。
可能看起来像这样。 Activity:
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.
}
}
}