实现android 串口程序访问复合接口(USB 3.0 UVC+ACM ),请求打开失败

lv_geyan 2026-02-27 13:46:05
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());
    }

 

...全文
22 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lv_geyan 02-27 14:06
  • 打赏
  • 举报
回复

boolean granted = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false); 该代码授权访问总是失败

80,492

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧