使用Android usb Host 调用claimInterface时崩溃 10C
  @Override
    public void onResume() {
        super.onResume();
         mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
       // mUsbManager.requestPermission(device, mPermissionIntent);
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        registerReceiver(mUsbReceiver, filter);
    }
    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(mUsbReceiver);
    }
    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (ACTION_USB_PERMISSION.equals(action)) {
                synchronized (this) {
                    device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                        if(device != null){
                            //call method to set up device communication

                            Log.d(TAG,"usb EXTRA_PERMISSION_GRANTED");
                        }
                    }
                    else {
                        Log.d(TAG,"permission denied for device"+device);
                    }
                }
            }
        }
    };

    public int initUsb(){
        mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
        HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
        Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
        while(deviceIterator.hasNext()){
            device = deviceIterator.next();
            //your code
            if(mVendorID == device.getVendorId() && mProductID == device.getProductId()) {
                if(mUsbManager.hasPermission(device)) {

                } else {
                    mUsbManager.requestPermission(device,mPermissionIntent);
                    break;
                }
                break;
            } else {
                device = null;
            }
        }
        return 0;
    }

    private int initCommunication() {
        /*
        if(mVendorID == device.getVendorId() && mProductID == device.getProductId()) {
            int interfaceCount = device.getInterfaceCount();
            for (int interfaceIndex = 0; interfaceIndex < interfaceCount; interfaceIndex++) {
                UsbInterface usbInterface = device.getInterface(interfaceIndex);

                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) {
                            mUsbEndpointOut = ep;
                        } else {
                            mUsbEndpointIn = ep;
                        }
                    }
                }

                if ((null == mUsbEndpointIn) || (null == mUsbEndpointOut)) {
                    mUsbEndpointIn = null;
                    mUsbEndpointOut = null;
                    mUsbInterface = null;
                } else {
                    mUsbInterface = usbInterface;
                    mUsbDeviceConnection = mUsbManager.openDevice(device);
                    if(mUsbDeviceConnection==null){
                        Log.d(TAG, " connection is null!");
                        return -1;
                    }
                    if(mUsbDeviceConnection!=null&&mUsbDeviceConnection.claimInterface(mUsbInterface, true)) {
                        Log.d(TAG, " connection succeeded!");
                    }else{
                        Log.d(TAG, " connection failed!");
                    }
                    break;
                }
            }
        }*/

        if(device == null) {
            Log.d(TAG, "Please insert USB flash disk!");
            return -1;
        }
        if(device.getInterfaceCount() != 1) {
            Log.d(TAG, "Not a USB flash disk!");
            return-2;
        }
        UsbInterface intf = device.getInterface(0);
        if(intf.getEndpointCount() != 2) {
            Log.d(TAG, "Not a USB flash disk!");
            finish();
            return-3;
        } else {
            mUsbEndpointIn = intf.getEndpoint(0);   // Bulk-In端点
            mUsbEndpointOut = intf.getEndpoint(1);  // Bulk_Out端点
        }
        if (device != null) {
            UsbDeviceConnection connection = mUsbManager.openDevice(device);
            if (connection != null && connection.claimInterface(intf, true)) {
                Log.d(TAG, "Make connection succeeded!");
                mUsbDeviceConnection = connection;
                mUsbInterface = intf;
            } else {
                Log.d(TAG, "Make connection failed!");
                mUsbDeviceConnection = null;
                finish();
            }
        }
        return 0;
    }

    public int closeDev(){
        device = null;
        return 0;
    }

我调用的顺序是initUsb onResum,并在Ocreat中调用,然后调用的initCommunication。在运行过程中,程序跑到claimInterface这里就崩溃了,请各位帮我找下问题或者提出建议,谢谢大家了, 我很急~~~
initCommunication中我写了两种方法,注释掉的是第一种,在claimInterFace时崩溃,没注释的部分还在等测试结果

1个回答

qq_22701117
qq_22701117 我看过这篇文章,基本也是按照描述来写的
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

Android usb host 传输速度

# 开发android设备获取下位机数据 协议都搞好了 但是不同机型传输速度区别很大 获取一张600k的图片数据 (魅蓝m2 root 支持otg )用了2s不到 (红米 note3 未root 支持hid )用了8s左右,

Android USB Host问题

大家好,在这想请教大家一个关于USB host HID通讯的问题; 首先,我的这个HID设备(触摸框)是与android系统通讯的,就是用户在触摸框范围内触摸时,android系统会有对应的触摸事件响应,比如点击打开程序,滑动等;但是我这边自己额外写了一个与该设备通讯的程序,当我的程序连接上这个设备后,这个设备的输入数据只有我的程序能够读取到。而原本与android系统的一些触摸事件都不响应了,即使我的程序中关闭了与该设备的连接。触摸框设备的触摸信息也不能发送给安卓系统了,请问这个是什么原因呢?

usbhost设备拔掉,但是通过枚举设备,依然可以枚举到

我在android4.2上开发一个用usbhost通信的apk,为了支持可插拔,我用捕捉系统intent,但是发现,不是每次都能捕捉到intent;改为通过枚举设备号来检测设备的插拔状态,发现,当usbhost设备拔掉,却依然可以获取到pid和vid,也就是说系统认为设备还是attached状态,为什么会这样,或者有没有可以清楚设备信息的函数,是系统对设备的状态信息进行更新?

USB HOST 与 USB DEVICE枚举后通讯

USB HOST 与 USB DEVICE枚举后通讯,端点需要一一对应吗?

各位android的高手,请问怎么得到,判断一台机器上usb盘的目录是什么

各位android的高手,请问怎么得到,判断一台机器上usb盘的目录是什么 或者怎么判断一个路径是不是usb盘的 一个实例如下(我现在的一个android设备现状): 1,有内部存储器sdcard,具体路径:/mnt/sdcard 2,有tf卡,具体路径:/mnt/ext_sd 3,有u盘,具体路径:/mnt/usbhost1 我可以得到/mnt/usbhost1,并且确定其是u盘的路径 但是其他设备不一定会和我这个设备相同, 比如有的设备u盘路径可能是/mnt/sda1,tf卡设备路径可能是/mnt/tfcard 我想知道有没有方法可以获取到/mnt/sda1,并且确定其是u盘的路径而不是tf卡路径 我现在是通过以下方法判断的 String devicePath = intent.getDataString().toLowerCase().substring(7); if (devicePath.contains("usb")) { //这个是u盘 } 但是这并不准确,如上面的/mnt/sda1

android 外部调用activity

我从一个链接直接进入app里面的某个acitivity,我用scheme **_ ``` <intent-filter>     <!--下面这几个必须要设置--> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/>     <!--协议部分--> <data android:scheme="myapp" android:host="baidu" android:path="/news" android:port="8080"/> </intent-filter>**_ ``` 这样写,还是调不起来,有哪位大神,帮忙看下。

android app可以使用USB线通过Accessory模式与win7进行传输数据文件吗?

我想写一个android app,app生成一个数据文件通过USB线传输到win7指定的目录,但不用ADB实现,我想用Android USB Accessory Mode(USB 从机模式)的方法,可以实现吗?

Android 错误提示地址被占用

小弟使用Android的usb host做与设备的通信,参考各技术博客,完成了设备获取,端点获取,获取权限,打开设备等操作,但是运行程序时就会有地址被占用的错误。通过断点调试,发现是在调用claimInterface()这个方法时出现了地址被占用的错误,然后程序自己就自动关闭了。请问各位,这个问题该从哪方面着手解决这个问题,先谢谢你们了~~比较急,再次感谢 ![错误信息](https://img-ask.csdn.net/upload/201804/13/1523604066_223112.png) ![USB设备信息 大容量存储设备](https://img-ask.csdn.net/upload/201804/13/1523604455_195519.png)

android平板usb转串口通信问题(MTK芯片)

我使用android平板(MTK主芯片)通过usb host方式转串口(PL2303)连接单片机,一般情况下能正常通信,但是遇到干扰等情况后,平板端usb连接断开,重新插拔也不能连接,插入U盘也不能识别,但是重启平板后可以连接和识别U盘等。 请问有没有什么方法解决这个问题?或者有没有一个函数调用重新初始化Usb,以至于不需要重启平板?

禁用 android OTG功能

如题 现在有android平板本身已支持USB HOST ,想写一个功能,禁用掉usb接口连接U盘的功能, 本身我的app已经有root权限了 , 尝试data/property/persist.sys.usb.config 修改了这里面的东西 但是只能禁用adb调试功能, 之后按照网上说的又去修改了system/etc/permssions/下的xml文件 取消了usb.host权限 还是不行 插上U盘依旧可以读取 我们要的最终效果是可以禁用平板usb接口的各种功能包括adb调试 和 连接U盘 有大神了解吗 本人对硬件这块了解的不多 可以用代码实现吗

Android系统连接USB设备,无法获取权限?

ndroid系统连接USB设备时,出现“没有获取USB的权限”。然后我对Android系统进行root获取权限,之后重新想连接控制USB设备,还是显示“Could not grant permissions to USB”也就是还不能获取权限?请问这该怎么办?![图片说明](https://img-ask.csdn.net/upload/201601/15/1452863295_70971.png)

手机通过USB连接外设且手机作为Host

怎么设置USBendpoint是OUT还是IN 而且我的bulkTransfer里的USBendpoint老是报空指针错误

Android UsbManager 获取不到HID设备

已经在AndroidManifest.xml配置了 ``` <uses-permission android:name="android.hardware.usb.host" /> <uses-permission android:name="android.hardware.usb.accessory" /> <uses-feature android:name="android.hardware.usb.host" android:required="true" /> ``` 安卓手机中添加了 ``` <?xml version="1.0" encoding="utf-8"?> <permissions> <feature name="android.hardware.usb.host" /> </permissions> ``` 下面是部分代码 ``` UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); int count =deviceList.size();//当外接U盘时,此处是1,当外接鼠标或自己的HID设备时,此处是0,搜索了一下资料,说是UsbManager的源码,里面有一个过滤名单,只要是设备的subclass=1都获取不到,但一直没找到subclass=1在哪 ```

Android手机修改HOST文件的问题

手机ROOT之后,想修改HOST的文件,就把电脑的HOST文件复制到手机上面覆盖手机原有的HOST文件 但是修改之后我发现不起做用 后来找到原因,原来是HOST文件在手机上面有个小空格最后一个。。 但是这种的HOST文件在电脑上面就可以。在手机上就必须要把这个小空格去掉,上千行的HOST不可能一个一个的改 请问大家谁有好的办法快速的去了这些小空格 [img]http://dl.iteye.com/upload/attachment/529598/ca8501f2-972d-3ae7-ae5c-766db6b9a762.png[/img] HOST文件在这里。。最好有JAVA的程序哈生成手机的HOST文件,后面的文件不带那种小格的

三星S6无法读取到Usb数据

通过UsbDeviceConnection读取不到三星S6等系列的Usb串口数据,其它如华为、Oppo等都可以 正常读到,这是为啥呢? 打开Usb接口代码如下: ``` showInfo("开始寻找端口"); int interfaceCount = targetdevice.getInterfaceCount(); showInfo("端口数量:"+interfaceCount); for (int interfaceIndex = 0; interfaceIndex < interfaceCount; interfaceIndex++) { UsbInterface usbInterface = targetdevice.getInterface(interfaceIndex); showUSBClass(usbInterface); if ((UsbConstants.USB_CLASS_CDC_DATA != usbInterface.getInterfaceClass()) && (UsbConstants.USB_CLASS_COMM != usbInterface.getInterfaceClass()) && UsbConstants.USB_CLASS_VENDOR_SPEC!=usbInterface.getInterfaceClass()) { continue; } int endpointCount = usbInterface.getEndpointCount(); showInfo("端点数量:"+endpointCount); for (int i = 0; i < endpointCount; 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; } showUsbpointType(ep); } } if ((null == mUsbEndpointIn) || (null == mUsbEndpointOut)) { showInfo("endpoint is null"); mUsbEndpointIn = null; mUsbEndpointOut = null; usbInterface = null; } else { showInfo("out: " + mUsbEndpointOut + ",in: " + mUsbEndpointIn); mInterface = usbInterface; mDeviceConnection = usbManager.openDevice(targetdevice); beginTest(); break; } } ``` 发送读取代码如下: ``` int ret; ret = mDeviceConnection.bulkTransfer(mUsbEndpointOut, bytes, bytes.length, 5000); byte[] receiveytes = new byte[32]; //根据设备实际情况写数据大小 ret = mDeviceConnection.bulkTransfer(mUsbEndpointIn, receiveytes, receiveytes.length, ```

android usb使用模式的相关问题

郭神: 你好,我目前在做一个安卓程序向USB口发数据的东西,但是对安卓控制USB这块不是很了解,所以想向你请教一下。 目前的情况是这样的,我知道安卓的USB工作模式有host模式和accessory模式,对应的分别是USB_ACCESSORY_ATTACHED和USB_DEVICE_ATTACHED的两种广播,然后我写了代码,建立了一个广播监听,对以上两种广播以及USB_STATE广播都进行监听。手机连接电脑后只能监听到USB_STATE广播。 所以我想问的是手机连接到PC后会有USB_ACCESSORY_ATTACHED和USB_DEVICE_ATTACHED这两个广播吗,以及我能够通过accessory或者host模式来与PC进行数据通讯吗

android 底部4个tabar来回快速切换 奔溃 No host错误

AndroidRuntime: FATAL EXCEPTION: main Process: com.yizooo.yizooo, PID: 21870 java.lang.IllegalStateException: No host at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1235) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230) at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2042) at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1976) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1092) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) at android.os.Handler.handleCallback(Handler.java:743) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:5546) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684) 10-21 18:25:32.393 27110-27110/com.yizooo.yizooo E/SMACK-Voe: enter JNI_OnLoad 截图: ![图片说明](https://img-ask.csdn.net/upload/201610/21/1477045669_89543.png)

如何在Android上运行Python?

最近对Android平台很感兴趣,经常和朋友们谈论Spoxt项目中的ADC。 Java不是我喜欢的语言。我们在使用S60版本,这个平台的Python API是比较好用的。自从Jython 出现以后,Android平台上就没使用任何官方的Python语言, 那么如何让snake和robot一起工作?

Android系统控制连接usb外部存储设备的代码在哪里能找到,我想在其中增加一个选择指定设备的功能

代码指的是系统代码,Android系统支持USBhost功能。当u盘插在手机上时,系统自动甄别其是否为指定外设,如果是,没有额外动作,一切如常;如果不是,系统自动移除外设;楼主是Android新手,希望大家给予些帮助或思路

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问