有Internet时自动刷新活动

问题描述

我有一个ActivityNonetwork.java活动。该文件的目的是当没有网络/互联网时,显示ActivityNonetwork活动。

我尝试了一下,我关闭了互联网,并显示了此页面(成功!!!),但是当我再次打开互联网时,该页面没有刷新,即使我打开了该页面也显示了同一页面上网。

我的ActivityNonetwork.java代码:

package com.Notely.SplashScreenandAccounts;

import androidx.activity.OnBackPressedCallback;
import androidx.activity.OnBackPressedDispatcherOwner;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.Notely.Notes.ActivityDashboard;

public class ActivityNonetwork extends AppCompatActivity {

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

    final Button exit = findViewById(R.id.exit);
    final Button retry = findViewById(R.id.retry);

    exit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            exitApp();
        }
    });
    retry.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            retryApp();
        }
    });

    if (checkNetwork() == true) {
        finish();
        overridePendingTransition(0,0);
        startActivity(getIntent());
        overridePendingTransition(0,0);

        Intent activitySplash = new Intent(this,ActivitySplash.class);
        startActivity(activitySplash);
    }
}

private boolean checkNetwork() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

public void exitApp() {
    Intent exitApp = new Intent(Intent.ACTION_MAIN);
    exitApp.addCategory( Intent.CATEGORY_HOME );
    exitApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(exitApp);
}

public void retryApp() {
    Intent retryApp = new Intent(this,ActivitySplash.class);
    startActivity(retryApp);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent exitApp = new Intent(Intent.ACTION_MAIN);
    exitApp.addCategory( Intent.CATEGORY_HOME );
    exitApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(exitApp);
}
}

当互联网来临时,有什么方法可以刷新页面?

解决方法

创建活动后,您只需检查网络连接, 您必须初始化观察者以进行网络更改

阅读此article并管理您的网络连接

,

您可以在项目中使用广播接收器来实现

按如下所示创建一个类-

Gazetteer.query.get(1).terms

然后在课程下创建-

x[which(SSasymp(log10(x),yf,y0,log_alpha) == 0.1)]

创建PrefsManager类-为此功能创建单独的类不是强制性的。您可以将此代码添加到MainActivity。

client.on('guildMemberAdd',member => {
    const channel = member.guild.channels.cache.find(ch => ch.name === 'welcome');
    if (!channel) return;
        channel.send(`Welcome to the community,${member}!`);
});

在MainActivity中

public class NetworkChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context,final Intent intent) {
   PrefManager.getInstance(context).setPreviousNetworkStatus
   (NetworkUtil.getConnectivityStatusString(context));
 }
}

在onCreate方法注册接收器中

class NetworkUtil {

private static int TYPE_WIFI = 1;
private static int TYPE_MOBILE = 2;
private static int TYPE_NOT_CONNECTED = 0;


private static int getConnectivityStatus(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (null != activeNetwork) {
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            return TYPE_WIFI;

        if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
            return TYPE_MOBILE;
    }
    return TYPE_NOT_CONNECTED;
}

static String getConnectivityStatusString(Context context) {
    int conn = NetworkUtil.getConnectivityStatus(context);
    String status = null;
    if (conn == NetworkUtil.TYPE_WIFI) {
        status = context.getString(R.string.wifi_enabled);
    } else if (conn == NetworkUtil.TYPE_MOBILE) {
        status = context.getString(R.string.mobile_data_enable);
    } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
        status = context.getString(R.string.not_connected_to_internet);
    }
    return status;
 }
}

覆盖以下方法

public class PrefManager {

public static final String PREVIOUS_NETWORK_STATE = "previous_network_state";

private static SharedPreferences sharedPreferences;
private static PrefManager prefManager;

private PrefManager(Context context) {
    sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME,Context.MODE_PRIVATE);
}

public static PrefManager getInstance(Context context) {
    if (prefManager == null) {
        prefManager = new PrefManager(context);
    }
    return prefManager;
}

public SharedPreferences getSharedPreferences() {
    return sharedPreferences;
}

public void setPreviousNetworkStatus(String status) {
    sharedPreferences.edit().putString(PREVIOUS_NETWORK_STATE,status).apply();
}

public String getPreviousNetworkStatus() {
    return sharedPreferences.getString(PREVIOUS_NETWORK_STATE,"");
}
}

然后创建此方法-

 private NetworkChangeReceiver networkChangeReceiver = NetworkChangeReceiver()

使用onDestroy方法取消注册接收器

 registerReceiver(
        networkChangeReceiver,IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
    )

我希望这对您有用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...