精华内容
下载资源
问答
  • usbmanager

    2012-10-22 18:32:07
    很好用的东西 他家用用看usbmanager_1[1].0.0.tar.gz
  • USBManager

    2011-11-09 19:21:26
    USBManager 可以用于禁用U盘,适合用在学校、公司等场合,可以维护电脑安全
  • UsbManager

    2019-12-28 17:28:30
    android.hardware.usb.UsbManager 这个类允许您访问USB的状态并与USB设备通信。目前,公共API中只支持主机模式。 开发人员指南 有关与usb硬件通信的详细信息,请阅读USB开发人员指南. 摘要 常数...

    public class UsbManager 
    extends Object 

    java.lang.Object
       ↳android.hardware.usb.UsbManager

     


    这个类允许您访问USB的状态并与USB设备通信。目前,公共API中只支持主机模式。

    开发人员指南

    有关与usb硬件通信的详细信息,请阅读USB开发人员指南.

     

    摘要

    常数

    StringACTION_USB_ACCESSORY_ATTACHED

    当用户附加USB附件时发送的活动意图。

    StringACTION_USB_ACCESSORY_DETACHED

    广播动作:USB附件分离事件的广播。

    StringACTION_USB_DEVICE_ATTACHED

    用户附加USB设备时发送的活动意图。

    StringACTION_USB_DEVICE_DETACHED

    广播操作:USB设备分离事件的广播。

    StringEXTRA_ACCESSORY

    额外名称ACTION_USB_ACCESSORY_ATTACHEDACTION_USB_ACCESSORY_DETACHED包含UsbAccessory附件的对象。

    StringEXTRA_DEVICE

    额外名称ACTION_USB_DEVICE_ATTACHEDACTION_USB_DEVICE_DETACHED包含UsbDevice对象,用于该设备。

    StringEXTRA_PERMISSION_GRANTED

    添加到PendingIntent传入requestPermission(android.hardware.usb.UsbDevice, android.app.PendingIntent)requestPermission(android.hardware.usb.UsbAccessory, android.app.PendingIntent)包含一个布尔值,该值指示用户是否授予权限。

    公共方法

    UsbAccessory[]getAccessoryList()

    返回当前附加的USB附件列表。

    HashMap<StringUsbDevice>getDeviceList()

    返回包含当前附加的所有USB设备的HashMap。

    booleanhasPermission(UsbAccessory accessory)

    如果调用方具有访问附件的权限,则返回true。

    booleanhasPermission(UsbDevice device)

    如果调用方具有访问设备的权限,则返回true。

    ParcelFileDescriptoropenAccessory(UsbAccessory accessory)

    打开一个文件描述符,用于将数据读写到USB附件。

    UsbDeviceConnectionopenDevice(UsbDevice device)

    打开设备,以便可以用它来发送和接收数据。UsbRequest.

    voidrequestPermission(UsbDevice device, PendingIntent pi)

    请求给定包访问设备的临时权限。

    voidrequestPermission(UsbAccessory accessory, PendingIntent pi)

    请求给定包访问附件的临时权限。

    遗传方法

    下课 java.lang.Object

    常数

    动作USB附件

    加进空气污染指数第12级

    public static final String ACTION_USB_ACCESSORY_ATTACHED

    当用户附加USB附件时发送的活动意图。

     

     

    常数:“android.hardware.usb.action.USB_ACCESSORY_ATTACHED”

    动作USB附件分离

    加进空气污染指数第12级

    public static final String ACTION_USB_ACCESSORY_DETACHED

    广播动作:USB附件分离事件的广播。这个意图是在USB附件被分离时发送的。

     

     

    常数:“android.hardware.usb.action.USB_ACCESSORY_DETACHED”

    动作USB装置

    加进空气污染指数第12级

    public static final String ACTION_USB_DEVICE_ATTACHED

    用户附加USB设备时发送的活动意图。当USB设备在主机模式下连接到USB总线时,就会发送此意图。

     

     

    常数:“android.hardware.usb.action.USB_DEVICE_ATTACHED”

    动作USB设备分离

    加进空气污染指数第12级

    public static final String ACTION_USB_DEVICE_DETACHED

    广播操作:USB设备分离事件的广播。当USB设备在主机模式下与USB总线分离时,就会发送此意图。

     

     

    常数:“android.hardware.usb.action.USB_DEVICE_DETACHED”

    额外附件

    加进空气污染指数第12级

    public static final String EXTRA_ACCESSORY

    额外名称ACTION_USB_ACCESSORY_ATTACHEDACTION_USB_ACCESSORY_DETACHED包含UsbAccessory附件的对象。

     

    定值:“附件”

    额外装置

    加进空气污染指数第12级

    public static final String EXTRA_DEVICE

    额外名称ACTION_USB_DEVICE_ATTACHEDACTION_USB_DEVICE_DETACHED包含UsbDevice对象,用于该设备。

     

    恒定值:“设备”

    额外许可

    加进空气污染指数第12级

    public static final String EXTRA_PERMISSION_GRANTED

    添加到PendingIntent传入requestPermission(android.hardware.usb.UsbDevice, android.app.PendingIntent)requestPermission(android.hardware.usb.UsbAccessory, android.app.PendingIntent)包含一个布尔值,该值指示用户是否授予权限。

     

    常量值:“许可”

    公共方法

    getAccessoryList

    加进空气污染指数第12级

    public UsbAccessory[] getAccessoryList ()

    返回当前附加的USB附件列表。(在当前的实现中,最多只能有一个)
    要求PackageManager#FEATURE_USB_ACCESSORY可以使用PackageManager.hasSystemFeature(String).

     

    回报
    UsbAccessory[]USB附件列表,如果没有附加,则为NULL。

     

    getDeviceList

    加进空气污染指数第12级

    public HashMap<StringUsbDevice> getDeviceList ()

    返回包含当前附加的所有USB设备的HashMap。USB设备名称是返回的HashMap的键。如果没有附加设备,或者USB主机模式不活动或不受支持,则结果将为空。
    要求PackageManager#FEATURE_USB_HOST可以使用PackageManager.hasSystemFeature(String).

     

    回报
    HashMap<StringUsbDevice>包含所有连接的USB设备的HashMap。

     

    哈斯

    加进空气污染指数第12级

    public boolean hasPermission (UsbAccessory accessory)

    如果调用方具有访问附件的权限,则返回true。许可可能是通过requestPermission(android.hardware.usb.UsbAccessory, android.app.PendingIntent)或者由用户选择调用方作为附件的默认应用程序。
    要求PackageManager#FEATURE_USB_ACCESSORY可以使用PackageManager.hasSystemFeature(String).

     

    参数
    accessoryUsbAccessory*检查

     

    回报
    boolean如果调用方有权限,则为true。

     

    哈斯

    加进空气污染指数第12级

    public boolean hasPermission (UsbDevice device)

    如果调用方具有访问设备的权限,则返回true。许可可能是通过requestPermission(android.hardware.usb.UsbDevice, android.app.PendingIntent)或者由用户选择调用方作为设备的默认应用程序。类usb设备的权限UsbConstants#USB_CLASS_VIDEO对于目标SDK的客户端Build.VERSION_CODES.P而且,只有当他们有额外的Manifest.permission.CAMERA许可。
    要求PackageManager#FEATURE_USB_HOST可以使用PackageManager.hasSystemFeature(String).

     

    参数
    deviceUsbDevice*检查

     

    回报
    boolean如果调用方有权限,则为true。

     

    开合器

    加进空气污染指数第12级

    public ParcelFileDescriptor openAccessory (UsbAccessory accessory)

    打开一个文件描述符,用于将数据读写到USB附件。

    如果数据从InputStream从该文件描述符创建的USB传输的所有数据应立即读取。如果只读取部分请求,则删除传输的其余部分。
    要求PackageManager#FEATURE_USB_ACCESSORY可以使用PackageManager.hasSystemFeature(String).

     

    参数
    accessoryUsbAccessory*要打开的USB附件

     

    回报
    ParcelFileDescriptor文件描述符,如果附件无法打开,则为NULL。

     

    开放设备

    加进空气污染指数第12级

    public UsbDeviceConnection openDevice (UsbDevice device)

    打开设备,以便可以用它来发送和接收数据。UsbRequest
    要求PackageManager#FEATURE_USB_HOST可以使用PackageManager.hasSystemFeature(String).

     

    参数
    deviceUsbDevice*打开装置

     

    回报
    UsbDeviceConnectionUsbDeviceConnection,或null如果打开失败

     

    请求执行

    加进空气污染指数第12级

    public void requestPermission (UsbDevice device, 
                    PendingIntent pi)

    请求给定包访问设备的临时权限。如果尚未授予权限,则可能导致向用户显示系统对话框。成功或失败通过PendingIntent派。如果成功,则授予调用方访问设备的权限,直到设备断开为止。以下附加内容将添加到pi中:

    类usb设备的权限UsbConstants#USB_CLASS_VIDEO对于目标SDK的客户端Build.VERSION_CODES.P而且,只有当他们有额外的Manifest.permission.CAMERA许可。
    要求PackageManager#FEATURE_USB_HOST可以使用PackageManager.hasSystemFeature(String).

     

     

    参数
    deviceUsbDevice*请求对

     

    piPendingIntent*PendingIntent返回结果

     

    请求执行

    加进空气污染指数第12级

    public void requestPermission (UsbAccessory accessory, 
                    PendingIntent pi)

    请求给定包访问附件的临时权限。如果尚未授予权限,则可能导致向用户显示系统对话框。成功或失败通过PendingIntent派。如果成功,则授予调用方访问附件的权限,直到设备断开为止。以下附加内容将添加到pi中:


    要求PackageManager#FEATURE_USB_ACCESSORY可以使用PackageManager.hasSystemFeature(String).

     

     

    参数
    accessoryUsbAccessory*请求对

     

    piPendingIntent*PendingIntent返回结果

     

    展开全文
  • 记录:UsbManager的使用

    千次阅读 2017-10-31 13:56:12
    最近一直使用到身份证刷卡器,M1刷卡器。都有相关的demo。很快的使用上了,不过在...事与愿违,不没有成功,不能抽时间查相关的UsbManager相关的资料。在这里把其简单的记录一下,^_^, 毕竟口号就抄,抄,抄. .(侵删)

    摘要:最近一直使用到身份证刷卡器,M1刷卡器。都有相关的demo。很快的使用上了,不过在使用M1的时候,没有循环(类似公交卡可以一直刷卡)读卡的demo,自己随便的开一个线程去无限读。事与愿违,不没有成功,不能抽时间查相关的UsbManager相关的资料。在这里把其简单的记录一下,^_^, 毕竟口号就抄,抄,抄. .(侵删)

      USB背景知识

      USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一

      硬件上,它是用插头连接。一边是公头(plug),一边是母头(receptacle)。例如:PC上的插头就是母头,USB设备使用公头与PC相连

      Host
      USB是由 Host端控制整个总线的数据传输。单个USB上,只能有一个Host

      OTG
      On The Go,这是在 USB2.0引入的一种mode,提出了一个新的概念叫主机协商协议(Host Negotiation Protocol),允许两个设备间商量谁去当Host

      Android中的USB

      Android中对USB支持是3.1开始,显然是加强Android平板的对外扩展能力。而对 USB使用更多的是Android在工业中的使用。Android功能板子一般都会提供多个USB和串口,它们是连接外设手段的桥梁。比如:现在市面上的一体机,Android的板子上面会有很多的USB和串口,但是其中Android板子除了一个系统什么都没有,没有任何的传感器,摄像头等等。。全部是外接,就等同于一台式电脑。

      我们在使用这些外接设备的时候,我们需要来了解一下Android为我们提供的API。其具体在android.hardware.usb包中。我们需要了解一下UsbManagerUsbDeviceUsbDeviceConnection , UsbEndpoint , UsbInterface UsbRequest , UsbConstants , 这几个类,只要使用到USB都要用到它们。


    • UsbManager:获得USB的状态,与连接的USB设备通信


    • UsbDevice:USB设备的抽象,它包含了一个或多个的UsbInterface,而每个UsbInterface包含多个UsbEndpoint。Host与其通信,先打开UsbDeviceConnection,使用UsbRequest在一个端点(UsbEndpoint)发送和接受数据。


    • UsbDeviceConnection:host与device建立的连接,并在endpoint传输数据。


    • UsbEndpoint:endpoint是interface的通信信道。


    • UsbInterface : 定理设备的功能集,一个UsbDevice包含多个UsbInterface,每个UsbInterface都是独立的。


    • UsbRequest:usb请求包。可以在UsbDeviceConnection上异步传输数据。注意是只在异步通信时才会使用到它。


    • UsbConstants:usb常量定义,对应 linux/usb/ch9.h

    UsbManager常用方法
    getDeviceList() 获得设备列表,返回的是一个HashMap
    hasPermission(UsbDevice device) 判断你的应用程序是否有接入此USB设备的权限,如果有则返回真,否则返回false
    openDevice(UsbDevice device) 打开USB设备,以便向此USB设备发送和接受数据,返回一个关于此USB设备的连接
    requestPermission(UsbDevice device, PendingIntent pi) 向USB设备请求临时的接入权限


    UsbDevice常用方法
    getDeviceClass() 返回此USB设备的类别,用一个整型来表示
    getDeviceId() 返回唯一标识此设备的ID号,也用一个整型来表示
    getDeviceName() 返回此设备的名称,用一个字符串来表示
    getDeviceProtocol() 返回此设备的协议类别,用一个整型来表示
    getDeviceSubclass() 返回此设备的子类别,用一个整型来表示
    getVendorId()返回生产商ID
    getProductId() 返回产品ID
    getInterfaceCount()返回此设备的接口数量
    getInterface(int index) 得到此设备的一个接口,返回一个UsbInterface


    UsbDeviceConnection常用方法
    bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout) 通过给定的endpoint来进行大量的数据传输,传输的方向取决于该节点的方向,buffer是要发送或接收的字节数组,length是该字节数组的长度。传输成功则返回所传输的字节数组的长度,失败则返回负数
    controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout该方法通过0节点向此设备传输数据,传输的方向取决于请求的类别,如果requestType为USB_DIR_OUT则为写数据,USB_DIR_IN, 则为读数据


    UsbEndpoint常用方法
    getAddress() 获得此节点的地址
    getAttributes() 获得此节点的属性
    getDirection() 获得此节点的数据传输方向


    UsbInterface常用方法
    getId() 得到给接口的id号。
    getInterfaceClass() 得到该接口的类别
    getInterfaceSubclass()得到该接口的子类
    getInterfaceProtocol() 得到该接口的协议类别。
    getEndpointCount() 获得关于此接口的节点数量
    getEndpoint(int index) 对于指定的index获得此接口的一个节点,返回一个UsbEndpoint



      USB的广播

      可以通过广播接接收器接收USB的插拔信息:当插入USB插头到一个USB端口或从一个USB端口移除一USB插头。都可以获取到

    
     PendingIntent permissionIntent1 = PendingIntent.getBroadcast(this, 0,new Intent(ACTION_USB_PERMISSION), 0);
    
            // Broadcast listen for new devices
            IntentFilter filter = new IntentFilter();
            filter.addAction(ACTION_USB_PERMISSION);
            filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
            filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
            this.registerReceiver(mUsbReceiver, filter);
    
     /*
         *  BroadcastReceiver when insert/remove the device USB plug into/from a USB port
         *  创建一个广播接收器接收USB插拔信息:当插入USB插头插到一个USB端口,或从一个USB端口,移除装置的USB插头
         */
        BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
                    //插入事件
    
                } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
                    //拔出事件
    
                } else 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.getProductId() == 8211 && device.getVendorId() == 1305)
                                    || (device.getProductId() == 8213 && device
                                    .getVendorId() == 1305))
                            {
                                if(mUsbDriver.openUsbDevice(device))
                                {
                                    if(device.getProductId()==8211)
                                        mUsbDev1 = device;
                                    else
                                        mUsbDev2 = device;
                                }
                            }
                        }
                        else {
                            Toast.makeText(MainActivity.this,"permission denied for device",
                                    Toast.LENGTH_SHORT).show();
                            //Log.d(TAG, "permission denied for device " + device);
                        }
                    }
                }
            }
        };



      USB的启动程序和 pid的注册

      时常在有多个视屏播放器,浏览器没有设置为默认的情况下都会弹出一个选择框。usb也一样,需要我们在AndroidManifest.xml进行注册。可以注册在activity标签里面,也可以注册在 application标签里面。不管在那里面,都需要在对应的activity标签里面注册

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



      和添加权限

     <uses-feature
            android:name="android.hardware.usb.host"
            android:required="true"/>
        <uses-permission android:name="android.permission.MANAGE_USB"/>
        <uses-permission android:name="android.permission.HARDWARE_TEST"/>

      进行筛选我们自己的 USB的厂家id和产品id。可以在res下新建一个xml。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <!-- 以下内容的 vendor-id、product-id就是USB的vid和pid了-->
        <usb-device vendor-id="4292" product-id="33896"/>
        <usb-device vendor-id="1024" product-id="50010"/>
        <usb-device vendor-id="1155" product-id="19799"/>
        <usb-device vendor-id="4292" product-id="33485"/>
    </resources>

      再在AndroidManifest.xml的activity或者application标签注册

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

      在这样之后,在USB插入的时候,就会自行启动我们的activity。

      USB的通信

       把USB连接成功,就需要进行与它通信了。

    bulkTransfer(this.h[this.g], var5, var4, 3000)

      在做好准备之后,就这一个话。哈哈哈哈哈,啊嗝

      这里摘抄两个前辈写的
      前辈一:

    private void initCommunication(UsbDevice device) {
            tvInfo.append("initCommunication in\n");
            if(1234 == device.getVendorId() && 5678 == device.getProductId()) {
                tvInfo.append("initCommunication in right device\n");
                int interfaceCount = device.getInterfaceCount();
                for (int interfaceIndex = 0; interfaceIndex < interfaceCount; interfaceIndex++) {
                    UsbInterface usbInterface = device.getInterface(interfaceIndex);
                    if ((UsbConstants.USB_CLASS_CDC_DATA != usbInterface.getInterfaceClass())
                            && (UsbConstants.USB_CLASS_COMM != usbInterface.getInterfaceClass())) {
                        continue;
                    }
    
                    for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
                        UsbEndpoint ep = usbInterface.getEndpoint(i);
                        if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
                            if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
                                mUsbEndpointIn = ep;
                            } else {
                                mUsbEndpointOut = ep;
                            }
                        }
                    }
    
                    if ((null == mUsbEndpointIn) || (null == mUsbEndpointOut)) {
                        tvInfo.append("endpoint is null\n");
                        mUsbEndpointIn = null;
                        mUsbEndpointOut = null;
                        mUsbInterface = null;
                    } else {
                        tvInfo.append("\nendpoint out: " + mUsbEndpointOut + ",endpoint in: " +
                                mUsbEndpointIn.getAddress()+"\n");
                        mUsbInterface = usbInterface;
                        mUsbDeviceConnection = mUsbManager.openDevice(device);
                        break;
                    }
                }
            }
        }

      前辈二 : (一个jar,这里只截取其获取getEndpoint)

            private UsbInterface[] e = new UsbInterface[2];
            private UsbDeviceConnection[] f = new UsbDeviceConnection[2];
            private int g = -1;
            private UsbEndpoint[] h = new UsbEndpoint[2];
            private UsbEndpoint[] i = new UsbEndpoint[2];
    
    
            int var2 = this.d[this.g].getInterfaceCount();
                Log.i("UsbDriver", " m_Device[m_UsbDevIdx].getInterfaceCount():" + var2);
                if(var2 == 0) {
                    return false;
                } else {
                    if(var2 > 0) {
                        this.e[this.g] = this.d[this.g].getInterface(0);
                    }
    
                    if(this.e[this.g].getEndpoint(1) != null) {
                        this.i[this.g] = this.e[this.g].getEndpoint(1);
                    }
    
                    if(this.e[this.g].getEndpoint(0) != null) {
                        this.h[this.g] = this.e[this.g].getEndpoint(0);
                    }

      这个指示一部分,可以看出里面获取的手法就简化了很多

      上面的可以愉快的玩耍了,就讲一下把其转化成一直读卡遇到的问题。代码如下:

        public boolean init(Context context) {
            UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
            HashMap<String, UsbDevice> devices = manager.getDeviceList();
            LoggerUtil.i(TAG, "device.size = " + devices.size());
            if (devices.size() <= 0) {
                return false;
            }
            UsbDevice myUsbDevice = null;
            Iterator<UsbDevice> iterator = devices.values().iterator();
            while (iterator.hasNext()) {
                UsbDevice device = iterator.next();
                LoggerUtil.i(TAG, "device vid = " + device.getVendorId() + " , pid = " + device.getProductId());
                if (ReaderAndroidUsb.isSupported(device)) {
                    myUsbDevice = device;
                    break;
                }
            }
            if (myUsbDevice == null) {
                return false;
            }
            // 判断是否拥有该设备的连接权限
            if (!manager.hasPermission(myUsbDevice)) {
                PendingIntent pd = PendingIntent.getBroadcast(context, 0,
                        new Intent(Device_USB), PendingIntent.FLAG_UPDATE_CURRENT);
                            /*
                             * 展示征求用户同意连接这个设备的权限的对话框。 当用户回应这个对话框时,
                             * 广播接收器就会收到一个包含用一个boolean值来表示结果的EXTRA_PERMISSION_GRANTED字段的意图。
                             * 在连接设备之前检查这个字段的值是否为true和设备之间的“交流”
                             */
                manager.requestPermission(myUsbDevice, pd);
            }
            if (!manager.hasPermission(myUsbDevice)) {
                return false;
            }
            // 如果已经拥有该设备的连接权限,直接对该设备操作
            ReaderAndroidUsb readerAndroidUsb = new ReaderAndroidUsb(manager);
            readerAndroidUsb.closeReader();
            try {
                        /*
                         * 函数说明: 直接打开 USB 接口读写器
                         *   返回值:
                         *   >=0 表示打开读写器成功
                         *   <0 表示打开读写器失败。
                         */
                int st = readerAndroidUsb.openReader(myUsbDevice);
                if (st >= 0) {
                    reader = readerAndroidUsb;
                    return true;
                } else {
                    return false;
                }
            } catch (Exception e) {
                return false;
            }
        }

      ReaderAndroidUsb 为我使用读卡器中的一个打开卡的方法。最初的时候我没有在 init( )方法里面传递 context,其中的 USBmanager也只在类的初始化的时候,进行初始化一次。后面的循环读卡中,刷卡一段时间就再也刷不起了。

      后面的而修改办法就是,同上。初始化传入context,重新获取 UsbManager,一切重新开始。在刷卡成功后,关闭当前的usb的连接。等同于每一次都是单次刷卡,只是把单次刷卡需要调用的东西通过代码实时完成。

    参考链接

    1. USB基础知识概论
    2. usb中的endpoint(端点)和传输模式
    3. Android实战技巧之四十九:Usb通信之USB Host
    4. Android下的USB Host介绍和开发
    5. Android开发之USB数据通信
    展开全文
  • ADK 工具包公开了一个AdkManager来管理UsbManager和UsbAccessory 。 通过这种方式,您无需完全了解有关 ADK 工作原理的任何背景概念。 无论如何不要忘记阅读。 支持 如果您需要支持,请发送消息到。 贡献指南 如果...
  • UsbManager来识别外置的camera设备,授权打开的功能。 授权功能 //申请USB连接权限 private synchronized void requestPermission(UsbDevice device) { //申请USB连接权限 mPermissionIntent = ...

    用UsbManager来识别外置的camera设备,授权打开的功能。

    授权功能

        //申请USB连接权限
        private synchronized void requestPermission(UsbDevice device) {
            //申请USB连接权限
            mPermissionIntent = PendingIntent.getBroadcast(appContext, 0, new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_UPDATE_CURRENT);
            mUsbManager.requestPermission(device, mPermissionIntent);
    
        }

    之前一直使用的是SDK27的版本,授权都是没有问题,弹出授权框授权,当我兼容了androidx升级到了28之后,授权框就一直不弹出。

     

    查看日志,发现在授权的时候,会有一句这样的打印

    UsbUserSettingsManager: Camera permission required for USB video class devices

     

    原因是应该28之后,需要动态申请camera权限才可以授权弹框。

    解决办法,要不版本到27及以下,要么先授权camera。

    展开全文
  • 使用UsbManager获取插入手机的USB设备名字 import android.app.Activity; import android.content.Context; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.os....

    使用UsbManager获取插入手机的USB设备名字

    import android.app.Activity;
    import android.content.Context;
    import android.hardware.usb.UsbDevice;
    import android.hardware.usb.UsbManager;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setView();
        }
        private void setView() {
            UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
            HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
            Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
            List<UsbDevice> usbDevices = new ArrayList<>();
            while (deviceIterator.hasNext()) {
                UsbDevice device = deviceIterator.next();
                usbDevices.add(device);
                Log.e("getDeviceList", "getDeviceList: " + device.getProductName());
            }
        }
    }

    展开全文
  • HID:Human Interface Device。如鼠标、键盘、游戏手柄等;...UsbManager manager = (UsbManager) m_context.getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> deviceList
  • UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap, UsbDevice> deviceList = manager.getDeviceList(); Iterator<UsbDevice> deviceIterator = deviceList.values()....
  • UsbManager_gr

    2012-11-27 17:26:29
    很好用的软件,但没好好测试过
  • 下面的场景都是安卓设备作为主机模式来说明的Android系统提供在设备为主机模式下的Usb管理工具UsbManager,相关的类说明:UsbDevice:连接到Android主机的Usb设备,一个或多个UsbInterface: UsbDevice中提供的功能...
  • usbmanager管理器

    2011-11-14 11:17:45
    用于WINDOWS系统下USB端口管理,设有密码管理功能,是一款很不错的绿色小软件!!!
  • 可以加密您的USB接口的工具,请大家放心使用,无病毒。
  • UsbManager, UsbDevice的简单示例

    千次阅读 2018-04-17 16:47:00
    UsbManager usbManager; private HashSet<UsbDevice> printerSet = new HashSet(); private BroadcastReceiver usbBroadcastReceiver = new BroadcastReceiver() { @Override public void ...
  • 1. 首先保证我的程序没有问题,
  • 我最近正在编写一个USB主机应用程序,但由于我无法检测到设备连接/分离事件,因为我无法检测到设备附加/分离事件,我按照...在调试之后,似乎没有发生UsbManager.ACTION_USB_DE...
  • 因此抽出一段时间研究了一下Linux下有关USB的知识与GTK+2.0编程接口,最后写成了这个USB设备管理小工具,取个名字叫usbmanager,目前的版本能够实现USB设备管理的基本功能了,比如查看USB设备树,查看USB设备描述符...
  • UsbManager 获取不到HID设备( http://ask.csdn.net/questions/193856 ),尼玛这不仅仅只是我一个人遇到的问题啊!  其次,通过ADB查看,/dev/input/eventX结果有对应的节点生成,于是就想直接操作该节点就...
  • UsbManager ClassDefinitionAssembly:Mono.Android.dllThis class allows you to access the state of USB and communicate with USB devices.In this article[Android.Runtime.Register("android/hardware/usb/UsbM...
  • 这是我的logcat输出- 03-23 16:13:12.250: E/AndroidRuntime(12284): FATAL EXCEPTION: main 03-23 16:13:12.250: E/AndroidRuntime(12284): java.lang.NoClassDefFoundError: com.android.future.usb.UsbManager 03...
  • Android开发中USB串口通信开发...1 ,UsbManager:负责管理USB设备的类,你可以在相应代码中通过以下方法获得 //获取UsbManager实例方法 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,556
精华内容 622
关键字:

USBManager