Android 在任何屏幕上通知用户未连接到internet?

Android 在任何屏幕上通知用户未连接到internet?,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我正在开发一个应用程序,在应用程序中的任何一点(在任何片段中-如果我错了请纠正我),如果用户未连接到internet,一个弹出窗口(我想我必须使用toast)要求用户 打开wi-fi(如果wi-fi已关闭且没有数据连接),或 连接到wi-fi(如果wi-fi已打开但未连接),或 打开手机中的数据 如何在应用程序中的任意点显示弹出窗口 我应该让用户进入设置并打开wifi或采取相应的措施,还是停止显示消息 此应用程序确实需要internet连接。谢谢。首先,您必须检查您的设备是否已连接到inte

我正在开发一个应用程序,在应用程序中的任何一点(在任何片段中-如果我错了请纠正我),如果用户未连接到internet,一个弹出窗口(我想我必须使用toast)要求用户

  • 打开wi-fi(如果wi-fi已关闭且没有数据连接),或
  • 连接到wi-fi(如果wi-fi已打开但未连接),或
  • 打开手机中的数据
  • 如何在应用程序中的任意点显示弹出窗口
  • 我应该让用户进入设置并打开wifi或采取相应的措施,还是停止显示消息

  • 此应用程序确实需要internet连接。谢谢。

    首先,您必须检查您的设备是否已连接到internet。下面的代码将帮助您检查这一点

    检查互联网可用性的方法:

     public boolean isOnline() {
            ConnectivityManager cm =
                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();
            return netInfo != null && netInfo.isConnectedOrConnecting();
        }
    
    public static AlertDialog displayMobileDataSettingsDialog(final Activity activity, final Context context){
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle("No Internet");
            builder.setMessage("Please connect to your internet");
            builder.setPositiveButton("Wifi", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    context.startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                    dialog.cancel();
                }
            });
            builder.setNegativeButton("Mobile Data", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                     Intent intent = new Intent();
                     intent.setComponent(new ComponentName("com.android.settings","com.android.settings.Settings$DataUsageSummaryActivity"));
                     dialog.cancel();
                     startActivity(intent);
                     activity.finish();
    
                }
            });
            builder.show();
    
            return builder.create();
        }
    
    如果上述布尔值为真,则您可以继续操作,或者您必须指示用户转到设置并打开移动数据或Wi-Fi连接。请参考以下代码以指导用户。如果上述布尔值返回false,则调用以下方法

    displayMobileDataSettingsDialog(your current activity,context);
    
    显示警报的方法:

     public boolean isOnline() {
            ConnectivityManager cm =
                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();
            return netInfo != null && netInfo.isConnectedOrConnecting();
        }
    
    public static AlertDialog displayMobileDataSettingsDialog(final Activity activity, final Context context){
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle("No Internet");
            builder.setMessage("Please connect to your internet");
            builder.setPositiveButton("Wifi", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    context.startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                    dialog.cancel();
                }
            });
            builder.setNegativeButton("Mobile Data", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                     Intent intent = new Intent();
                     intent.setComponent(new ComponentName("com.android.settings","com.android.settings.Settings$DataUsageSummaryActivity"));
                     dialog.cancel();
                     startActivity(intent);
                     activity.finish();
    
                }
            });
            builder.show();
    
            return builder.create();
        }
    
    可选: 有时,您的设备可能已连接到internet,但不会收到任何数据,在这种情况下,您可以使用以下方法检查设备是否确实收到了数据

    public boolean isInternetAvailable() {
            try {
                InetAddress ipAddr = InetAddress.getByName("google.com"); //You can replace it with your name
                return !ipAddr.equals("");
    
            } catch (Exception e) {
                return false;
            }
    
        }
    

    希望它能帮助您。

    您应该使用AlertDialog。有按钮的。干杯不算什么。看这里。当您尝试访问服务器时,即在您从服务器发送/接收数据的代码中,您必须检查internet可用性并向用户显示警报。非常感谢您提供详细的解释和代码。请问这个代码应该放在哪里。如果我把它放在一个新类中,那么该类应该放在一个包的哪个位置?2)如果AlertDialog的文本应该是另一种语言呢?我可以在strings.xml中使用字符串并在此处使用它们吗?“2)如果AlertDialog的文本应该是另一种语言怎么办?我可以在strings.xml中使用字符串并在此处使用它们吗?”-是的,您可以将此代码放在您的类下,您可以将数据更新到服务器。。。最好把你的代码放在你认为应该放在的地方,我会让你知道的。谢谢回复。好的,换句话说,在我的应用程序中,假设有10个屏幕,每个屏幕上都有一个与远程服务器或web服务的事务。所以我需要检查每个屏幕上的互联网连接,如果没有,我应该让用户知道。我没有将冗余代码放在10个不同的地方,而是尝试将其放在一个类中,并在10个不同的地方调用这些方法。你能告诉我怎么做吗?因为它有getSystemService(Context.CONNECTIVITY\u服务);和其他活动或上下文相关的成员,我感到震惊。请帮忙。