📜  Android 网络连接服务

📅  最后修改于: 2020-10-11 05:56:32             🧑  作者: Mango

Android网络连接服务

Android网络连接服务使我们可以检查设备的网络连接信息。在执行基于Internet服务的任务(例如从服务器(互联网)获取数据或将数据写入服务器)的任务时,检查设备的Internet连接非常重要。

使用Android网络连接服务,我们还可以确定android设备网络的类型。它可能是TYPE_WIFI(wifi),TYPE_MOBILE(手机),TYPE_BLUETOOTH(蓝牙)等类型。

Android网络连接服务示例

让我们创建一个简单的示例来检查设备的网络连接及其类型。

要访问设备的网络连接,我们需要在AndroidMenifest.xml文件中提供网络访问权限。


在layout的activity_main.xml文件中,添加以下代码。对于访问设备的网络状态,不需要布局文件。在这里,我们仅使用activity_main.xml文件存储网络类型的状态。

activity_main.xml




    

    

创建一个名为NetworkState.java的Java类。此类包含getConnectivityStatus()方法,该方法根据当前网络连接返回常量整数值。

代码context.getSystemService(Context.CONNECTIVITY_SERVICE)用于返回访问网络属性的ConnectivityManager类的实例。

NetworkState.java

package example.javatpoint.com.networkconnectivityservice;


import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetworkState {
    public static int TYPE_NOT_CONNECTED = 0;
    public static int TYPE_WIFI = 1;
    public static int TYPE_MOBILE = 2;

    public 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;
    }

    public static String getConnectivityStatusString(Context context) {
        int conn = NetworkState.getConnectivityStatus(context);
        String status = null;
        if (conn == NetworkState.TYPE_WIFI) {
            status = "Wifi enabled";
        } else if (conn == NetworkState.TYPE_MOBILE) {
            status = "Mobile data enabled";
        } else if (conn == NetworkState.TYPE_NOT_CONNECTED) {
            status = "Not connected to Internet";
        }
        return status;
    }
}

创建一个名为NetworkReceiver.java的接收器类,并扩展BroadcastReciever类。此类处理设备的网络状态中发生的更改。设备的网络状态更改时,将调用BroadcastReciever类的onReceive()方法。

NetworkReceiver.java

package example.javatpoint.com.networkconnectivityservice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;


public class NetworkReceiver extends BroadcastReceiver {
    static String  status =null;
    @Override
    public void onReceive(Context context, Intent intent) {
        status = NetworkState.getConnectivityStatusString(context);
        Toast.makeText(context, status, Toast.LENGTH_LONG).show();
        if(status == "Wifi enabled"){
            //your code when wifi enable
        }
        else if(status=="Mobile data enabled"){
            //your code when TYPE_MOBILE network enable
        }
        else if(status=="Not connected to Internet"){
            //your code when no network connected
        }
    }
}

在MainActivity.java类中,我们通过单击Button在TextView中显示设备的网络状态。

MainActivity.java

package example.javatpoint.com.networkconnectivityservice;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    Button button;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                NetworkReceiver receiver = new NetworkReceiver() ;
                String networkStatus = receiver.status;
                textView.setText("connection type: "+networkStatus);
                Toast.makeText(getApplicationContext(), networkStatus, Toast.LENGTH_LONG).show();
            }
        });
    }
}

在AndroidMenifest.xml文件中,添加网络访问权限和用于处理BroadcastReceiver类中发生的更改的接收器类。

AndroidMenifest.xml



    
    
    
        
            
                

                
            
        
        
            
                
                
            
        
    


输出量