当前位置:首页 > 行业动态 > 正文

安卓判断蓝牙是否连接网络连接网络连接wifi

在安卓中,通过BluetoothAdapter.isEnabled()判断蓝牙是否开启,ConnectivityManager.getNetworkInfo(Wifi.TYPE)检测WiFi连接状态

判断蓝牙是否连接

检查蓝牙是否启用

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
} else if (!bluetoothAdapter.isEnabled()) {
    // 蓝牙未开启
}

获取已连接的蓝牙设备

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
boolean isConnected = false;
for (BluetoothDevice device : pairedDevices) {
    if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
        isConnected = true;
        break;
    }
}

监听蓝牙连接状态变化

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
registerReceiver(new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
        // 处理状态变化
    }
}, filter);

判断网络连接状态

检查网络是否可用

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
boolean isConnected = networkInfo != null && networkInfo.isConnected();

判断网络类型(移动数据/WiFi)

网络类型 判断条件
移动数据 networkInfo.getType() == ConnectivityManager.TYPE_MOBILE
WiFi networkInfo.getType() == ConnectivityManager.TYPE_WIFI

使用 NetworkCapabilities(API 23+)

NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
boolean isInternet = capabilities != null && 
                    (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || 
                     capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));

判断WiFi连接状态

检查WiFi是否开启

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
boolean isWifiEnabled = wifiManager.isWifiEnabled();

检查是否连接到指定WiFi

WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String currentSSID = wifiInfo.getSSID(); // 格式如 ""Your_SSID""
boolean isConnectedToTarget = currentSSID.equals(""Your_SSID"");

监听WiFi状态变化

IntentFilter filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
        // 处理状态变化
    }
}, filter);

权限配置

功能 所需权限
检测蓝牙状态 BLUETOOTH
检测网络状态 ACCESS_NETWORK_STATE
检测WiFi状态 ACCESS_WIFI_STATE
修改网络/WiFi状态 CHANGE_NETWORK_STATE, CHANGE_WIFI_STATE

相关问题与解答

问题1:如何监听蓝牙设备断开连接?

解答
注册 BluetoothDevice.ACTION_BOND_STATE_CHANGED 广播,监听 EXTRA_BOND_STATE 字段:

安卓判断蓝牙是否连接网络连接网络连接wifi

int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
if (bondState == BluetoothDevice.BOND_NONE) {
    // 设备已断开连接
}

问题2:如何判断当前网络是否为移动数据?

解答
通过 ConnectivityManager 获取网络类型:

安卓判断蓝牙是否连接网络连接网络连接wifi

NetworkInfo networkInfo = cm.getActiveNetworkInfo();
boolean isMobile = networkInfo != null && 
                   networkInfo.getType() == ConnectivityManager.TYPE_MOBILE;