android byte[] 转string 好多问号_#WIPI# Android使用HID设备

    哈罗大家好。生活总是这样计划赶不上变化,今天为大家分享一下新加的小功能--使用Android设备连接HID设备。

    安卓内部已经内置了丰富的驱动,所以一般的设备我们只需要简单是设置就可灵活使用。

788161277b5d6f66306e12bee1ef21b6.png

  1. 首先对清单文件做简单修改

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="cool.wipi.myapplication" >   <uses-feature android:name="android.hardware.usb.host"/>    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:roundIcon="@mipmap/ic_launcher_round"        android:supportsRtl="true"        android:theme="@style/Theme.WiBox" >        <activity            android:name=".MainActivity"            android:label="@string/title_activity_main" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.HOME" />                <category android:name="android.intent.category.LAUNCHER" />                <category android:name="android.intent.category.DEFAULT" />            intent-filter>            <intent-filter>                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>            intent-filter>            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"                android:resource="@xml/device"                />        activity>    application>manifest>
  1. 编写java代码

public class SerialFragment extends Fragment {    UsbManager usbManager;    HashMap deviceList;    String info="";    TextView tvInfo;    TextView svInfo;    UsbDevice myDevice = null;    UsbDeviceConnection myConnection;    UsbInterface myUsbInterface;    //------------------------------    UsbEndpoint writeEP,readEP;    Button bt_Write,bt_read,bt;    //------------------------------    byte [] writerBuf = new byte[4096];    byte [] readBuf   = new byte[4096];    //-----------------------------    private SerialViewModel mViewModel;    public static SerialFragment newInstance() {        return new SerialFragment();    }    @Override    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,                             @Nullable Bundle savedInstanceState) {        return inflater.inflate(R.layout.fragment_serial, container, false);    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        mViewModel = new ViewModelProvider(this).get(SerialViewModel.class);        // TODO: Use the ViewModel        tvInfo   = getActivity().findViewById(R.id.tv1);        svInfo   = getActivity().findViewById(R.id.tv2);        bt_read  = getActivity().findViewById(R.id.bt_read);        bt_Write = getActivity().findViewById(R.id.bt_write);        bt       = getActivity().findViewById(R.id.button);        //------------------------------------------------       // TextView tv = (TextView) getView().findViewById(R.id.bluetooth_tv);        usbManager  = (UsbManager)getActivity().getApplicationContext().getSystemService(Context.USB_SERVICE);        deviceList = usbManager.getDeviceList();        showInfo("find"+deviceList.size()+"device");        for (UsbDevice device:deviceList.values()){            showInfo("VID"+device.getVendorId()+"PID"+device.getProductId());            if (device.getVendorId()== 0x03C3 && device.getProductId() == 0x1F01){                myDevice = device;            }            if (myDevice != null && usbManager.hasPermission(myDevice)){                showInfo("hasPermission");                myConnection = usbManager.openDevice(myDevice);                myUsbInterface = myDevice.getInterface(0);                myConnection.claimInterface(myUsbInterface,false);                int interfaceCount = myUsbInterface.getEndpointCount();                showInfo("interfaceCount"+interfaceCount);               //----------------------------------------------                for(int i = 0;i                    if(myUsbInterface.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN){                        readEP = myUsbInterface.getEndpoint(i);                    }else{                        writeEP = myUsbInterface.getEndpoint(i);                    }                }            }else{                showInfo("no hasPermission");            }            bt_Write.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    int checkSum = 0;                    Random rd  = new Random();                    for (int i = 0 ; i < 4096 ; i++){                         writerBuf[i] = (byte) rd.nextInt(255);                        checkSum += (writerBuf[i]&0x0ff);                    }                    String firstTen = "firsTen:";                    String lastTen = "lastTen:";                    for(int i=0;i < 10;i++){                        firstTen +=(writerBuf[i] & 0X0ff)+",";                        lastTen +=(writerBuf[4086+i] & 0x0ff)+",";                    }                    showInfo(firstTen);                    showInfo(lastTen);                    showInfo("sheckSum:"+checkSum);                    if (writeEP != null){//if (writerBuf != null){                        int count = 0;                        count = myConnection.bulkTransfer(writeEP,writerBuf,4096,500);                        showInfo("BulkTranster count :" + count);                    }                }            });            bt_read.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    if (readEP != null){//if (writerBuf != null){                        int count = 0,checkSum = 0;                        count = myConnection.bulkTransfer(readEP,readBuf,4096,500);                        showInfo("Read BulkTranster count :" + count);                        //---------------------                        for (int i = 0 ; i < 4096 ; i++){                            checkSum += (readBuf[i]&0x0ff);                        }                        String firstTen = "firsTen:";                        String lastTen = "lastTen:";                        for(int i=0;i < 10;i++){                            firstTen +=(readBuf[i] & 0X0ff)+",";                            lastTen +=(readBuf[4086+i] & 0x0ff)+",";                        }                        showInfo(firstTen);                        showInfo(lastTen);                        showInfo("sheckSum:"+checkSum);                        showInfo("bt_read");                    }                }            });            bt.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    showInfo("button");                }            });        }    }    void showInfo(String str){        info += str +"\n";        tvInfo.setText(info);        svInfo.setText(info);    }}
  1. 运行效果

1596c82bb9057676fa3ec8a3974f92b1.png

点击查看原文了解更多www.wipi.cool

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】有序集合的交集与并集

Redis支持多种类型的数据结构&#xff0c;最简单的字符串(strings)&#xff0c;适合存储对象的哈希(hash)&#xff0c;简单的字符串列表(list)&#xff0c;无序集合(set)&#xff0c;有序集合(sorted set)&#xff0c;以及用于做基数统计的HyperLogLog&#xff0c;其中使用频率…

从小害怕数学的他,却成为了科普数学教育的数学家

谈到数学&#xff0c;你们会想到什么&#xff1f;也许部分模友们会想到数学上的公式、定理、几何图形、微积分等等&#xff0c;也许会有模友们想到高数&#xff0c;&#xff08;多数大学生的痛&#xff09;也许大家还会想起高中数学老师课堂上的“循循教诲”——看书干嘛&#…

工作原理是什么_磁翻板液位计工作原理是什么?

液位计​大家都知道&#xff0c;是用来测量介质液位的仪表​&#xff0c;但是说到磁翻板液位计​这个概念可能大家都比较陌生&#xff0c;​磁翻板液位计​是根据浮力原理(阿基米德定律)结合磁性耦合作用研制而成&#xff0c;当被测量容器中的液位升降时&#xff0c;液位计主导…

我们该如何学习机器学习中的数学

数学在机器学习中非常重要&#xff0c;不论是在算法上理解模型代码&#xff0c;还是在工程上构建系统&#xff0c;数学都必不可少。通常离开学校后很难有机会静下心学习数学知识&#xff0c;因此我们最好能通过阅读小组或读书会等形式营造环境&#xff0c;并专注学习那些在实践…

标准梯度—lhMorpGradient

标准梯度 5*5正方形结构元素 标准梯度 7*7正方形结构元素 函数&#xff1a;lhMorpGradient 说明&#xff1a;形态学基本梯度运算&#xff0c;通过结构元素的改变&#xff0c;可以进行厚梯度&#xff0c;方向梯度等形态学计算 参数&#xff1a; src 输入图像 dst 输出图像 eleme…

神州云科DCN存储管理IP_干货!DCN校园网大二层解决方案详解

安徽水利水电职业技术学院始建于195年&#xff0c;是全国100所和安徽省3所国家示范性高职院校之一。学院坐落于安徽省省会合肥&#xff0c;交通便利&#xff0c;环境优美。校内设有九大实训中心&#xff0c;拥有实践性教学所必须的各类实验室、实训室、实习工厂等130个&#xf…

国产数据库占央采九成份额

3月&#xff0c;中央政府采购网发布《中国国家机关2021年数据库软件协议供货采购项目》成交公告&#xff0c;从入选采购名录的企业来看&#xff0c;除甲骨文和微软之外&#xff0c;其余入围的三十家企业均为本土企业。三十家本土企业中&#xff0c;既有阿里这种互联网巨头&…

应对程序员面试,你必须知道的8大数据结构

瑞士计算机科学家Niklaus Wirth在1976年写了一本书&#xff0c;名为《算法数据结构编程》。40多年后&#xff0c;这个等式仍被奉为真理。这就是为什么在面试过程中&#xff0c;需要考察软件工程师对数据结构的理解。几乎所有的问题都需要面试者对数据结构有深刻的理解。无论你是…

Windows Phone 知识锦(12月版)

很久没有更新Windows Phone 知识锦了&#xff0c;今天更新一下&#xff1a;将不同分类的文章进行归类&#xff0c;方便大家查看。 相信大家都喜欢jeffblankenburg的windows phone 31日开放谈吧&#xff0c;之前金山将它反映为中文了。如今他有退出了Mango版的31日开发谈&#…

自由、开源及其敌人 —— RMS事件簿

点击上方“开源社”关注我们| 作者&#xff1a;庄表伟| 编辑&#xff1a;沈于蓝| 设计&#xff1a;朱亿钦目前国际开源界和一些开源软件基金会对于道德和平权的争论正方兴未艾&#xff0c;我们觉得值得关注与了解。前置申明这是一篇严肃的八卦文&#xff0c;希望搞清楚一些社区…

Google 机器学习应用的43条经验法则

Google 的研究科学家 Martin Zinkevich 曾在 NIPS 2016 Workshop 分享了谷歌机器学习实践的四十三条法则。Martin Zinkevich 也在自己的博客上分享了这四十三条经验法则。文章《Rules of Machine Learning: Best Practices for ML Engineering》旨在帮助具备机器学习基础知识的…

lua虚拟机字节码修改_Java虚拟机(JVM)面试题大集合

本文整理自&#xff1a;ThinkWon 链接&#xff1a;blog.csdn.net/ThinkWon/article/details/104390752本文知识目录1、Java内存区域说一下 JVM 的主要组成部分及其作用&#xff1f;说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别&#xff1f;队列和栈是什么&#xff…

SQL Server CDC配合Kafka Connect监听数据变化

写在前面好久没更新Blog了&#xff0c;从CRUD Boy转型大数据开发&#xff0c;拉宽了不少的知识面&#xff0c;从今年年初开始筹备、组建、招兵买马&#xff0c;到现在稳定开搞中&#xff0c;期间踏过无数的火坑&#xff0c;也许除了这篇还很写上三四篇。进入主题&#xff0c;通…

惊喜开学季,教你如何在人工智能时代站稳脚跟!

暑假咻地一下过完啦&#xff0c;前几天&#xff0c;小天介绍了关于数模课程的开学季限时优惠&#xff08;传送门&#xff09;&#xff0c;今天要介绍的是python课程。接下来&#xff0c;小天来详细说明一下&#xff01;领取方式&#xff1a;公众号后台对话框回复“人工智能”免…

矢量合成和分解的法则_力的合成与分解专题解析,寒假复习!

合力与分力如果几个力共同作用在物体上产生的效果与一个力单独作用在物体上产生的效果相同&#xff0c;则把这个力叫做这几个力的合力&#xff0c;而那几个力叫做这一个力的分力。合力与分力的关系是等效替代关系&#xff0c;即一个力若分解为两个分力&#xff0c;在分析和计算…

.NET WebSocket 核心原理初体验

上个月我写了《.NET gRPC核心功能初体验》&#xff0c; 里面使用gRPC双向流做了一个打乒乓球的Demo&#xff0c; [实时][双向]这两个标签是不是很熟悉&#xff0c;对&#xff0c; WebSockets也可以做实时双向通信。本文将利用WebSockets(SignalR的一部分)搭建一个可双向通信的A…

CvBlobDetector 新目标检测算法简析

CvBlobDetector用于检测和判定当前帧中的Blob是否是新产生的目标&#xff0c;方法如下&#xff1a;

原来这些流弊的老板,曾经还是牛逼的程序猿!

“生活就像巧克力&#xff0c;你永远不知道下一颗是什么味道”&#xff0c;这句话用在互联网最适合不过&#xff0c;互联网从人类里面创造了一批神&#xff0c;说起他们的名字无人不知&#xff0c;但是你可知道这些神曾经也只是一个名不见经传的程序员。一起来看看他们是怎么一…

phpstormp新建PHP保存在哪里_记一次windows配置PHP环境

前言因为疫情原因一直不能回学校&#xff0c;电脑还在学校宿舍&#xff0c;所以在笔记本上搭建PHP环境&#xff0c;总不能在家混吃等死吧。正文【0】安装Apache2.40-0:Apache的下载链接The Apache HTTP Server Project0-1:点击a number of third party vendors下载window版本0-…

通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务...

我个人认为Actor应该是Dapr里比较重头的部分也是Dapr一直在讲的所谓“stateful applications”真正具体的一个实现&#xff08;个人认为&#xff09;&#xff0c;上一章讲到有状态服务可能很多同学看到后的第一反应是“不就是个分布式缓存吗”。那今天就讲讲Actor,看看这个东西…