Java 有Internet时自动刷新活动
我有一个Java 有Internet时自动刷新活动,java,android,android-studio,android-activity,android-networking,Java,Android,Android Studio,Android Activity,Android Networking,我有一个ActivityNonetwork.java活动。该文件的用途是,当没有网络/互联网时,将显示ActivityNonetwork活动 我试过了,我关闭了互联网并显示了这个页面(成功!!!),但是当我再次打开互联网时,页面不会刷新,即使在打开互联网后也会显示相同的页面 我的ActivityNonetwork.javacode: package com.Notely.SplashScreenandAccounts; import androidx.activity.OnBackPresse
ActivityNonetwork.java
活动。该文件的用途是,当没有网络/互联网时,将显示ActivityNonetwork
活动
我试过了,我关闭了互联网并显示了这个页面(成功!!!),但是当我再次打开互联网时,页面不会刷新,即使在打开互联网后也会显示相同的页面
我的ActivityNonetwork.java
code:
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);
}
}
有什么方法可以在互联网到来时刷新页面吗?创建活动时,您只需检查网络连接, 您必须初始化网络更改的观察者
阅读本文并管理您的网络连接您可以在项目中使用广播接收器来实现这一点 创建一个类,如下所示-
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
PrefManager.getInstance(context).setPreviousNetworkStatus
(NetworkUtil.getConnectivityStatusString(context));
}
}
然后在下面的类中创建-
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;
}
}
创建PrefsManager类-这不是为该功能创建单独类所必需的。您可以将此代码添加到MainActivity
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()
在onCreate方法中寄存器接收器
registerReceiver(
networkChangeReceiver,
IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
)
重写下面的方法
@Override void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String
key) {
if (key == PrefManager.PREVIOUS_NETWORK_STATE) {
onNetworkChanged()
}
}
然后创建这个方法-
private void onNetworkChanged() {
// your code here
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Intent activitySplash = new Intent(this, ActivitySplash.class);
startActivity(activitySplash);
}
在onDestroy方法中注销接收器
unregisterReceiver(networkChangeReceiver)
我希望这对您有用。您需要在后台使用ForeGroundService检查internet连接刷新活动是什么意思??您希望重新删除任何特定的代码块还是希望重新创建“活动”?您可以注册一个BroadcastReceiver来检查网络状态的变化,并根据它检查您是否在线。如果在线,只需刷新活动!