📜  如何在没有 Internet 连接对话框的 Android 中检查 Internet 连接?

📅  最后修改于: 2022-05-13 01:55:19.791000             🧑  作者: Mango

如何在没有 Internet 连接对话框的 Android 中检查 Internet 连接?

你好极客,今天我们将学习如何将 Internet Alert 的功能添加到我们的应用程序中。您肯定在几乎所有应用程序中都看到,当数据关闭或应用程序无法访问 Internet 时,它会弹出“无 Internet 连接”消息,然后再次连接到数据时显示消息“返回在线”或“Internet in connected”,我们将在我们的应用程序中实现相同的功能。

Internet Alert的目标/目的:

  • 通知用户他/她没有连接到网络。
  • 停止应用程序中所有与互联网相关的活动或服务。

我们将在本文中构建什么?

在这里,我们将创建一个按钮。每当用户按下按钮时,就会显示 Internet 连接消息。请注意,我们将使用Java语言实现此应用程序。下面给出了一个示例视频,以了解我们将在本文中做什么。

分步实施

第 1 步:创建一个新项目

  • 打开一个新项目。
  • 我们将使用Java语言处理 Empty Activity。保持所有其他选项不变。
  • 您可以在方便时更改项目的名称。
  • 将有两个名为activity_main.xml 和 MainActivity 的默认文件。Java

如果您不知道如何在 Android Studio 中创建新项目,那么您可以参考如何在 Android Studio 中创建/启动新项目?



第 2 步:导航到 app > manifests > AndroidManifest.xml 文件并粘贴以下代码以添加 Internet 权限


第 3 步:使用 activity_main.xml 文件

我们使用activity_main.xml文件中的按钮来执行操作。在activity_main.xml文件中使用以下代码。

XML

  


  
    
    


Java
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
  
public class ConnectionReceiver extends BroadcastReceiver {
  
    // initialize listener
    public static ReceiverListener Listener;
  
    @Override
    public void onReceive(Context context, Intent intent) {
  
        // initialize connectivity manager
        ConnectivityManager connectivityManager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);
          
        // Initialize network info
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
          
        // check condition
        if (Listener != null) {
              
            // when connectivity receiver
            // listener  not null
            // get connection status
            boolean isConnected = networkInfo != null && networkInfo.isConnectedOrConnecting();
              
            // call listener method
            Listener.onNetworkChange(isConnected);
        }
    }
  
    public interface ReceiverListener {
        // create method
        void onNetworkChange(boolean isConnected);
    }
}


Java
import android.content.Context;
import android.content.IntentFilter;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
  
import androidx.appcompat.app.AppCompatActivity;
  
import com.google.android.material.snackbar.Snackbar;
  
public class MainActivity extends AppCompatActivity implements ConnectionReceiver.ReceiverListener {
  
    Button btn_check;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // assign variable
        btn_check = findViewById(R.id.btn_check);
  
        // create method
        checkConnection();
        btn_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // call method
                checkConnection();
            }
        });
    }
  
    private void checkConnection() {
  
        // initialize intent filter
        IntentFilter intentFilter = new IntentFilter();
  
        // add action
        intentFilter.addAction("android.new.conn.CONNECTIVITY_CHANGE");
  
        // register receiver
        registerReceiver(new ConnectionReceiver(), intentFilter);
  
        // Initialize listener
        ConnectionReceiver.Listener = this;
  
        // Initialize connectivity manager
        ConnectivityManager manager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
  
        // Initialize network info
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  
        // get connection status
        boolean isConnected = networkInfo != null && networkInfo.isConnectedOrConnecting();
  
        // display snack bar
        showSnackBar(isConnected);
    }
  
    private void showSnackBar(boolean isConnected) {
  
        // initialize color and message
        String message;
        int color;
  
        // check condition
        if (isConnected) {
              
            // when internet is connected
            // set message
            message = "Connected to Internet";
              
            // set text color
            color = Color.WHITE;
  
        } else {
              
            // when internet 
            // is disconnected
            // set message
            message = "Not Connected to Internet";
              
            // set text color
            color = Color.RED;
        }
  
        // initialize snack bar
        Snackbar snackbar = Snackbar.make(findViewById(R.id.btn_check), message, Snackbar.LENGTH_LONG);
          
        // initialize view
        View view = snackbar.getView();
          
        // Assign variable
        TextView textView = view.findViewById(R.id.snackbar_text);
          
        // set text color
        textView.setTextColor(color);
          
        // show snack bar
        snackbar.show();
    }
  
    @Override
    public void onNetworkChange(boolean isConnected) {
        // display snack bar
        showSnackBar(isConnected);
    }
  
    @Override
    protected void onResume() {
        super.onResume();
        // call method
        checkConnection();
    }
  
    @Override
    protected void onPause() {
        super.onPause();
        // call method
        checkConnection();
    }
}


执行上述代码后,activity_main.xml 文件的设计将如下所示。

第 4 步:使用Java文件

使用以下方法创建一个名为ConnectionReceiver的新Java类



ConnectionReceiver 中使用以下代码。 Java文件。

Java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
  
public class ConnectionReceiver extends BroadcastReceiver {
  
    // initialize listener
    public static ReceiverListener Listener;
  
    @Override
    public void onReceive(Context context, Intent intent) {
  
        // initialize connectivity manager
        ConnectivityManager connectivityManager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);
          
        // Initialize network info
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
          
        // check condition
        if (Listener != null) {
              
            // when connectivity receiver
            // listener  not null
            // get connection status
            boolean isConnected = networkInfo != null && networkInfo.isConnectedOrConnecting();
              
            // call listener method
            Listener.onNetworkChange(isConnected);
        }
    }
  
    public interface ReceiverListener {
        // create method
        void onNetworkChange(boolean isConnected);
    }
}

转到主活动。 Java文件,参考如下代码。下面是MainActivity的代码。 Java文件。代码中添加了注释以更详细地理解代码。

Java

import android.content.Context;
import android.content.IntentFilter;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
  
import androidx.appcompat.app.AppCompatActivity;
  
import com.google.android.material.snackbar.Snackbar;
  
public class MainActivity extends AppCompatActivity implements ConnectionReceiver.ReceiverListener {
  
    Button btn_check;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // assign variable
        btn_check = findViewById(R.id.btn_check);
  
        // create method
        checkConnection();
        btn_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // call method
                checkConnection();
            }
        });
    }
  
    private void checkConnection() {
  
        // initialize intent filter
        IntentFilter intentFilter = new IntentFilter();
  
        // add action
        intentFilter.addAction("android.new.conn.CONNECTIVITY_CHANGE");
  
        // register receiver
        registerReceiver(new ConnectionReceiver(), intentFilter);
  
        // Initialize listener
        ConnectionReceiver.Listener = this;
  
        // Initialize connectivity manager
        ConnectivityManager manager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
  
        // Initialize network info
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  
        // get connection status
        boolean isConnected = networkInfo != null && networkInfo.isConnectedOrConnecting();
  
        // display snack bar
        showSnackBar(isConnected);
    }
  
    private void showSnackBar(boolean isConnected) {
  
        // initialize color and message
        String message;
        int color;
  
        // check condition
        if (isConnected) {
              
            // when internet is connected
            // set message
            message = "Connected to Internet";
              
            // set text color
            color = Color.WHITE;
  
        } else {
              
            // when internet 
            // is disconnected
            // set message
            message = "Not Connected to Internet";
              
            // set text color
            color = Color.RED;
        }
  
        // initialize snack bar
        Snackbar snackbar = Snackbar.make(findViewById(R.id.btn_check), message, Snackbar.LENGTH_LONG);
          
        // initialize view
        View view = snackbar.getView();
          
        // Assign variable
        TextView textView = view.findViewById(R.id.snackbar_text);
          
        // set text color
        textView.setTextColor(color);
          
        // show snack bar
        snackbar.show();
    }
  
    @Override
    public void onNetworkChange(boolean isConnected) {
        // display snack bar
        showSnackBar(isConnected);
    }
  
    @Override
    protected void onResume() {
        super.onResume();
        // call method
        checkConnection();
    }
  
    @Override
    protected void onPause() {
        super.onPause();
        // call method
        checkConnection();
    }
}

恭喜!我们已经成功地使应用程序检查 Internet 连接并向用户发出警报。这是我们应用程序的最终输出。

输出: