上一篇
安卓判断蓝牙是否连接网络连接网络连接wifi
- 行业动态
- 2025-04-24
- 7
在安卓中,通过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
字段:
int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR); if (bondState == BluetoothDevice.BOND_NONE) { // 设备已断开连接 }
问题2:如何判断当前网络是否为移动数据?
解答:
通过 ConnectivityManager
获取网络类型:
NetworkInfo networkInfo = cm.getActiveNetworkInfo(); boolean isMobile = networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE;