80,492
社区成员
发帖
与我相关
我的任务
分享
public TerminalFragment() {
//广播接收器
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (INTENT_ACTION_GRANT_USB.equals(intent.getAction())) {
boolean granted = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false);
UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
// 诊断信息:记录权限结果和设备信息
status("=== USB权限诊断开始 ===");
status("权限授予结果: " + granted);
status("请求的设备ID: " + deviceId);
// 如果 device 为 null,尝试通过 deviceId 重新查找
if (device == null) {
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
for (UsbDevice d : usbManager.getDeviceList().values()) {
if (d.getDeviceId() == deviceId) {
status(" 匹配到目标设备: " + d.getDeviceName());
device = d;
break;
}
}
}
// 处理权限结果
if (device != null) {
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
boolean hasPermission = usbManager.hasPermission(device);
if (granted || hasPermission) {
usbPermission = UsbPermission.Granted; // 标记为已授予
connect(); // 继续连接
} else {
// 权限被拒绝,提示用户
Toast.makeText(getActivity(),
"USB 权限被拒绝,请尝试重新插拔设备或在应用信息中清除数据",
Toast.LENGTH_LONG).show();
usbPermission = UsbPermission.Unknown; // 保持未知状态,允许再次尝试
}
} else {
// 找不到设备,提示用户
Toast.makeText(getActivity(),
"找不到目标设备,请尝试重新插拔设备",
Toast.LENGTH_LONG).show();
usbPermission = UsbPermission.Unknown; // 保持未知状态,允许再次尝试
}
status("=== USB权限诊断结束 ===");
}
}
};
mainLooper = new Handler(Looper.getMainLooper());
}
boolean granted = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false); 该代码授权访问总是失败