Android授权USB使用权限示例

news/2025/1/8 1:17:04/

使用效果:

授权实现过程:

1.在AndroidManifest.xml中增加android.hardware.usb.action.USB_DEVICE_ATTACHED的action及meta-data

action: 

 <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>

meta-data: 

<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter"/>

2.增加USB设备过滤

3.获取USB管理服务:

UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

 4.获取USB设备列表:

HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();

5.遍历USB设备列表:

for (UsbDevice dev: deviceList.values()){String usbInfo = "DeviceID: "+dev.getDeviceId()+"\n"+"VendorId: "+dev.getVendorId()+"\n"+"ProductId: "+dev.getProductId()+"\n"+"Manufacturer: "+dev.getManufacturerName()+"\n"+"Product: "+dev.getProductName()+"\n"+"Version: "+dev.getVersion()+"\n";tv.setText(usbInfo);System.out.println("==========================");System.out.println(usbInfo);System.out.println("==========================");
}

6.注册USB授权广播:

            //设备授权配置//Android14 API34 及或更高使用 FLAG_IMMUTABLE//Android14 API33 及或更低使用 FLAG_MUTABLEPendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0,new Intent(ACTION_USB_PERMISSION),Build.VERSION.SDK_INT>=34? PendingIntent.FLAG_IMMUTABLE:PendingIntent.FLAG_MUTABLE);IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);if (Build.VERSION.SDK_INT>=33){registerReceiver(mUsbReceiver, filter,Context.RECEIVER_EXPORTED);}else{registerReceiver(mUsbReceiver, filter);}

7.实现广播接收器

private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";private final String TAG = "usb_auth_demo";private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {String action = intent.getAction();if (ACTION_USB_PERMISSION.equals(action)){synchronized (this) {UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)){if(device != null){Log.i(TAG,"设备授权成功");Toast.makeText(context,"设备授权成功",Toast.LENGTH_LONG).show();}}else{Log.d(TAG, "设备拒绝授权: " + device);}}}}};

2.请求USB设备权限:

 

mUsbManager.requestPermission(dev, mPermissionIntent);

完整示例源码: 

https://github.com/tonyimax/usb_auth_demo.git


http://www.ppmy.cn/news/1561017.html

相关文章

Spring Boot AOP日志打印实现

在 Spring Boot 3.1.12 中使用 AOP 实现日志打印&#xff0c;记录前端传入的参数和后端返回的数据&#xff0c;可以按照以下步骤进行&#xff1a; 添加依赖 首先&#xff0c;确保你的 pom.xml 文件中包含了 Spring AOP 的依赖&#xff1a; <dependency><groupId>…

k8s基础(4)—Kubernetes-Service

Service概述 抽象层 ‌k8s的Service是一种抽象层&#xff0c;用于为一组具有相同功能的Pod提供一个统一的入口地址&#xff0c;并通过负载均衡将网络流量分发到这些Pod上。‌ Service解决了Pod动态变化的问题&#xff0c;例如Pod的IP地址和端口可能会发生变化&#xff0c;通过…

跨云迁移数据仓库中数据的方法

在两个云数据仓库&#xff08;例如 Amazon Redshift、Google BigQuery、Snowflake 或 Azure Synapse Analytics&#xff09;之间迁移数据需要仔细规划&#xff0c;以确保流程安全、稳定和高效。 在两个云数据仓库之间迁移数据的最佳解决方案取决于多个因素&#xff0c;包括数据…

六十二:HTTP/3: QUIC 协议格式

随着互联网技术的不断进步&#xff0c;网络协议的革新成为提升传输效率和用户体验的关键。HTTP/3 是超文本传输协议的最新版本&#xff0c;其核心基于 QUIC 协议&#xff0c;带来了诸多革命性的变化。在本文中&#xff0c;我们将深入探讨 HTTP/3 的 QUIC 协议格式及其重要性。 …

下载ffmpeg执行文件

打开网址&#xff1a;Download FFmpeg 按下面步骤操作 解压文件就可以看到ffmpeg的执行文件了&#xff0c;需要通过命令行进行使用&#xff1a; ffmpeg命令行使用参考&#xff1a; ffmpeg 常用命令-CSDN博客

K8s集群平滑升级(Smooth Upgrade of K8S Cluster)

简介&#xff1a; Kubernetes ‌ &#xff08;简称K8s&#xff09;是一个开源的容器编排和管理平台&#xff0c;由Google开发并维护。它最初是为了解决谷歌内部大规模容器管理的问题而设计的&#xff0c;后来在2014年开源&#xff0c;成为云原生技术的核心组成部分。‌‌1 K8…

ROS2软件架构全面解析-rclpy软件框架

前言 本章是详细介绍ROS2通信中间件中rclpy模块软件框架。 不了解背景的同学请先看&#xff1a; ROS2软件架构全面解析-学习如何设计通信中间件框架: link rclpy软件框架 rclpy &#xff1a;ROS Client Library for the Python language. 上面这句话清楚的描述rclpy对于ROS…

PyTorch Geometric框架下图神经网络的可解释性机制:原理、实现与评估

在机器学习领域存在一个普遍的认知误区&#xff0c;即可解释性与准确性存在对立关系。这种观点认为可解释模型在复杂度上存在固有限制&#xff0c;因此无法达到最优性能水平&#xff0c;神经网络之所以能够在各个领域占据主导地位&#xff0c;正是因为其超越了人类可理解的范畴…