Android平台提供了完善的外设检测机制,通过广播接收器、系统服务API和运行时权限管理,开发者可以实现对USB设备、耳机、存储设备和蓝牙设备的准确检测和状态监听。
【Settings】Android 常见外设检测机制
- [1. 检测外接鼠标](#1. 检测外接鼠标)
- [2. 检测外置USB存储/U盘](#2. 检测外置USB存储/U盘)
- [3. 检测外置TF/SD卡](#3. 检测外置TF/SD卡)
- [4. 检测SIM状态](#4. 检测SIM状态)
- [5. 检测摄像头状态](#5. 检测摄像头状态)
1. 检测外接鼠标
java
private boolean checkKeyboard() {
InputManager im = (InputManager) getSystemService(Context.INPUT_SERVICE);
int[] deviceIds = im.getInputDeviceIds();
boolean found = false;
for (int id : deviceIds) {
InputDevice device = im.getInputDevice(id);
if (device != null && !device.isVirtual() && device.isFullKeyboard()) {
found = true;
break;
}
}
return found;
}
2. 检测外置USB存储/U盘
java
private boolean checkUSBStorage() {
StorageManager sm = getSystemService(StorageManager.class);
boolean found = false;
List<VolumeInfo> volumeInfos = sm.getVolumes();
for (VolumeInfo vol : volumeInfos) {
if (vol.getDisk() != null && vol.getDisk().isUsb()) {
found = true;
}
}
return found;
}
3. 检测外置TF/SD卡
java
private boolean checkSDStorage() {
StorageManager sm = getSystemService(StorageManager.class);
boolean found = false;
List<VolumeInfo> volumeInfos = sm.getVolumes();
for (VolumeInfo vol : volumeInfos) {
if (vol.getDisk() != null && vol.getDisk().isSd()) {
found = true;
}
}
return found;
}
4. 检测SIM状态
java
public boolean checkSimType() {
SubscriptionManager mSubscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
final List<SubscriptionInfo> subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
if (subInfoList == null) {
return false;
}
for (SubscriptionInfo subInfo : subInfoList) {
final int simState = mTelephonyManager.getSimState(subInfo.getSimSlotIndex());
if ((simState != TelephonyManager.SIM_STATE_ABSENT)
&& (simState != TelephonyManager.SIM_STATE_UNKNOWN)
&& (simState != TelephonyManager.SIM_STATE_PERM_DISABLED)) {
return true;
}
}
return true;
}
5. 检测摄像头状态
java
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
private boolean checkCamera(int lensFacing) {
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
boolean found = false;
try {
String[] list = manager.getCameraIdList();
for (String id : list) {
CameraCharacteristics chars = manager.getCameraCharacteristics(id);
Integer facing = chars.get(CameraCharacteristics.LENS_FACING);
if (facing != null && facing == lensFacing) {
found = true;
break;
}
}
return found;
} catch (Exception e) {
return found;
}
}
// 检测前置摄像头
checkCamera(CameraCharacteristics.LENS_FACING_FRONT);
// 检测后置摄像头
checkCamera(CameraCharacteristics.LENS_FACING_BACK);