Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有Internet时自动刷新活动_Java_Android_Android Studio_Android Activity_Android Networking - Fatal编程技术网

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来检查网络状态的变化,并根据它检查您是否在线。如果在线,只需刷新活动!