当前位置: 首页 > article >正文

Android授权USB使用权限示例

使用效果:

授权实现过程:

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_MUTABLE
            PendingIntent 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.kler.cn/a/469568.html

相关文章:

  • C++拷贝构造函数与赋值操作符的区别
  • Docker-文章目录
  • unity学习8:unity的基础操作 和对应shortcut
  • Docker 远程访问完整配置教程以及核心参数理解
  • 2024数据湖架构实践案例(附资料)
  • 青少年编程与数学 02-006 前端开发框架VUE 07课题、条件渲染
  • 动态规划在斐波那契数列中的应用与优化
  • 2025年贵州省职业院校技能大赛信息安全管理与评估赛项规程
  • 银行大数据平台管理系统的设计与实现
  • 【Elasticsearch】节点与集群:架构原理与优化实践
  • ubuntu 22.04安装ollama
  • 修改openjdk17源码,手搓native方法调用java method方法(无参,无返回值)
  • 蓝耘:GPU算力云服务的技术探索与AIGC应用支持
  • 连接github和ai的桥梁:GitIngest
  • 后台管理系统动态面包屑Breadcrumb组件的实现
  • Python视频处理:噪声矩阵与并行计算的完美融合
  • Couchbase 和数据湖技术的区别、联系和相关性分析
  • Uniapp Android 本地离线打包(详细流程)
  • HCIA-Access V2.5_7_5_XG(S)- GPON网络演进为XG(S)-PON网络
  • Golang 入门基础知识