gpt4 book ai didi

android - 连接到互联网后如何自动刷新网页 View

转载 作者:行者123 更新时间:2023-12-01 04:47:17 25 4
gpt4 key购买 nike

在我的应用程序中,我实现了一个 webview 来显示包含一些有用信息的网页。现在,最初我检查了 Netwotk 是否可用。如果可用,它将连接到网页。如果没有,它会显示一个警报对话框,告诉您设备上没有互联网连接。之后它将重定向到设备的设置选项。我可以从此选项切换到 wifi。但问题是打开wifi后,当我回到工作页面时,它没有自动更新。我必须转到我的选项菜单页面,然后单击按钮,然后它会被更新。如何在打开互联网后像谷歌浏览器一样更新页面。这是我的代码

我的编辑代码

    public class JobPage extends AppCompatActivity {

private WebView webView;

public static final String WIFI = "Wi-Fi";
public static final String ANY = "Any";
private static final String URL = "https://app.com";

private static boolean wifiConnected = false;
private static boolean mobileConnected = false;
public static boolean refreshDisplay = true;

public static String sPref = null;

// The BroadcastReceiver that tracks network connectivity changes.
private NetworkReceiver receiver = new NetworkReceiver();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.job_layout);

webView=(WebView)findViewById(R.id.webView);
// Registers BroadcastReceiver to track network connection changes.
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
receiver = new NetworkReceiver();
this.registerReceiver(receiver, filter);

}


@Override
public void onDestroy() {
super.onDestroy();
// Unregisters BroadcastReceiver when app is destroyed.
if (receiver != null) {
this.unregisterReceiver(receiver);
}
}
// Refreshes the display if the network connection and the
// pref settings allow it.


// Checks the network connection and sets the wifiConnected and mobileConnected
// variables accordingly.
@Override
public void onStart () {
super.onStart();

// Gets the user's network preference settings
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);

// Retrieves a string value for the preferences. The second parameter
// is the default value to use if a preference value is not found.
sPref = sharedPrefs.getString("listPref", "Wi-Fi");

updateConnectedFlags();

if(refreshDisplay){
loadPage();
}
}
public void updateConnectedFlags() {
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
if (activeInfo != null && activeInfo.isConnected()) {
wifiConnected = activeInfo.getType() == ConnectivityManager.TYPE_WIFI;
mobileConnected = activeInfo.getType() == ConnectivityManager.TYPE_MOBILE;
} else {
wifiConnected = false;
mobileConnected = false;
}
}
public void loadPage() {
if (((sPref.equals(ANY)) && (wifiConnected || mobileConnected))
|| ((sPref.equals(WIFI)) && (wifiConnected))) {
webView.loadUrl(URL);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
refreshDisplay=true;

} else {
errorDialog();
}
}

public void errorDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder
.setMessage("No internet connection on your device. Would you like to enable it?")
.setTitle("No Internet Connection")
.setCancelable(false)
.setPositiveButton("Enable Internet",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
Intent dialogIntent = new Intent(android.provider.Settings.ACTION_SETTINGS);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(dialogIntent);
}
});
builder.setNegativeButton(" Cancel ", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
});

AlertDialog alert = builder.create();
alert.show();
}

}

我的 NetworkReceiver 类
    public class NetworkReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager conn = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = conn.getActiveNetworkInfo();

// Checks the user prefs and the network connection. Based on the result, decides whether
// to refresh the display or keep the current display.
// If the userpref is Wi-Fi only, checks to see if the device has a Wi-Fi connection.
if (WIFI.equals(sPref) && networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
// If device has its Wi-Fi connection, sets refreshDisplay
// to true. This causes the display to be refreshed when the user
// returns to the app.

Toast.makeText(context, "Wi-fi is connected", Toast.LENGTH_SHORT).show();
JobPage.refreshDisplay = true;

// If the setting is ANY network and there is a network connection
// (which by process of elimination would be mobile), sets refreshDisplay to true.
} else if (ANY.equals(sPref) && networkInfo != null) {
JobPage.refreshDisplay = true;

// Otherwise, the app can't download content--either because there is no network
// connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there
// is no Wi-Fi connection.
// Sets refreshDisplay to false.
} else {
JobPage.refreshDisplay = false;
Toast.makeText(context, "Lost internet connection", Toast.LENGTH_SHORT).show();
}
}
}

最佳答案

您需要添加一个 BroadcastReceiver 来处理 CONNECTIVITY_CHANGE .这将允许您的应用在网络状态发生变化时收到通知,例如没有连接互联网。

public class NetworkChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {
boolean isOnline = isOnline( context );
// Fire an event with the new status of the network.
Bus bus = new Bus(ThreadEnforcer.MAIN);
bus.post( new NetworkEvent( isOnline ) );
}

public boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
//should check null because in airplane mode it will be null
return (netInfo != null && netInfo.isConnected());
}
}

在您的 list 中,您还需要添加该接收器。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<receiver
android:name="NetworkChangeReceiver"
android:label="NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>

现在,为了实际发送数据,我将使用 Otto ,事件总线库。

创建一个类来包含我们将放在事件总线上的信息。
public class NetworkEvent {

private boolean isOnline;

public NetworkEvent( boolean isOnline ) {
this.isOnline = isOnline;
}
}

最后在您的 JobPage Activity 中,注册(并在 onDestroy 上取消注册)总线,然后您可以 Subscribe到事件。
public class JobPage extends AppCompatActivity {
@Override
protected void onCreated( Bundle savedInstanceState ) {
...
Bus bus = new Bus(ThreadEnforcer.MAIN);
bus.register(this);
...
}


...
@Subscribe
public void onNetworkChange( NetworkEvent event ) {
if( event.isOnline ) {
// Do refresh.
}
}
}

关于android - 连接到互联网后如何自动刷新网页 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45710559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com