如何在android应用程序中显示全球互联网连接的开和关? 我已经在广播接收器上显示了自定义对话框 并自动关闭互联网

如何在android应用程序中显示全球互联网连接的开和关? 我已经在广播接收器上显示了自定义对话框 并自动关闭互联网,android,Android,但我想实现它(不添加所有活动),我想让它变得通用 无需在每个活动中添加它 我通过接口通过此方法接收 @Override public void onNetworkConnectionChanged(boolean isConnected) { showSnack(isConnected); } private void showSnack(boolean isConnected) { if (isConnected) {

但我想实现它(不添加所有活动),我想让它变得通用 无需在每个活动中添加它

我通过接口通过此方法接收

@Override
    public void onNetworkConnectionChanged(boolean isConnected) {
        showSnack(isConnected);
    }


private void showSnack(boolean isConnected) {

        if (isConnected) {
            customDialogClass.cancel();
        } else {
            customDialogClass.show();
        }
    }


为此,您需要创建一个抽象活动,它应该扩展AppCompatActivity。在onResume()方法下的抽象活动中,为注册广播接收器以获取internet连接状态,并onDestroy()方法取消注册接收器

完成此操作后,现在使用您创建的AbstractActivity扩展每个活动


在广播接收器的onReceive()方法下,您可以使用自己的逻辑来显示对话框

您可以使用以下方法检查internet连接。如果internet连接不可用,它将返回null

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
您还需要:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在你的android清单中

//network check
public static boolean isNetworkAvailable(Activity activity) {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
AndroidManifest.xml

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

1。创建一个名为ConnectivityReceiver.java的类,并从BroadcastReceiver扩展它。

    public class ConnectivityReceiver extends BroadcastReceiver {
 
    public static ConnectivityReceiverListener connectivityReceiverListener;
 
    public ConnectivityReceiver() {
        super();
    }
 
    @Override
    public void onReceive(Context context, Intent arg1) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null
                && activeNetwork.isConnectedOrConnecting();
 
        if (connectivityReceiverListener != null) {
            connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
        }
    }
 
    public static boolean isConnected() {
        ConnectivityManager
                cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return activeNetwork != null
                && activeNetwork.isConnectedOrConnecting();
    }
 
 
    public interface ConnectivityReceiverListener {
        void onNetworkConnectionChanged(boolean isConnected);
    }}
public class MyApplication extends Application {
 
    private static MyApplication mInstance;
 
    @Override
    public void onCreate() {
        super.onCreate();
 
        mInstance = this;
    }
 
    public static synchronized MyApplication getInstance() {
        return mInstance;
    }
 
    public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
        ConnectivityReceiver.connectivityReceiverListener = listener;
    }
}
2。创建另一个名为MyApplication.java的类,并从Application扩展它。

    public class ConnectivityReceiver extends BroadcastReceiver {
 
    public static ConnectivityReceiverListener connectivityReceiverListener;
 
    public ConnectivityReceiver() {
        super();
    }
 
    @Override
    public void onReceive(Context context, Intent arg1) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null
                && activeNetwork.isConnectedOrConnecting();
 
        if (connectivityReceiverListener != null) {
            connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
        }
    }
 
    public static boolean isConnected() {
        ConnectivityManager
                cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return activeNetwork != null
                && activeNetwork.isConnectedOrConnecting();
    }
 
 
    public interface ConnectivityReceiverListener {
        void onNetworkConnectionChanged(boolean isConnected);
    }}
public class MyApplication extends Application {
 
    private static MyApplication mInstance;
 
    @Override
    public void onCreate() {
        super.onCreate();
 
        mInstance = this;
    }
 
    public static synchronized MyApplication getInstance() {
        return mInstance;
    }
 
    public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
        ConnectivityReceiver.connectivityReceiverListener = listener;
    }
}
3.打开AndroidManifest.xml并进行以下更改。

    public class ConnectivityReceiver extends BroadcastReceiver {
 
    public static ConnectivityReceiverListener connectivityReceiverListener;
 
    public ConnectivityReceiver() {
        super();
    }
 
    @Override
    public void onReceive(Context context, Intent arg1) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null
                && activeNetwork.isConnectedOrConnecting();
 
        if (connectivityReceiverListener != null) {
            connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
        }
    }
 
    public static boolean isConnected() {
        ConnectivityManager
                cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return activeNetwork != null
                && activeNetwork.isConnectedOrConnecting();
    }
 
 
    public interface ConnectivityReceiverListener {
        void onNetworkConnectionChanged(boolean isConnected);
    }}
public class MyApplication extends Application {
 
    private static MyApplication mInstance;
 
    @Override
    public void onCreate() {
        super.onCreate();
 
        mInstance = this;
    }
 
    public static synchronized MyApplication getInstance() {
        return mInstance;
    }
 
    public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
        ConnectivityReceiver.connectivityReceiverListener = listener;
    }
}
将MyApplication添加到标记

将ConnectivityReceiver添加为

声明INTERNET和访问\u网络\u状态权限


在对话框中使用基类(活动)显示/隐藏所有活动并将其扩展到基类(活动)。感谢您的回答,但正如您在我的输出中所看到的那样,所有活动都正常工作,我想在一个地方进行(就像我不想在每个活动中添加)我不知道这会有什么帮助这是一个Android谢谢您的回答,但它的工作方式与您在我的输出中看到的一样,我想在一个地方做这件事(就像我不想在每个活动中都添加一样),我认为你可以使用任何github库来检查互联网连接。请参考如果你知道任何事情都完成了,请正确阅读我想问的内容,查看我的输出图像这是sameYes,我明白我的确切回答。您只需在所有活动中调用一个方法,而不是复制所有代码我要实现它(不在所有活动中添加)