Android中通过wifi和硬件进行交互

最近研究与硬件交互的方法。交互方式是这样:首先设备会放出一个wifi,然后连接wifi后,wifi允许进行TCP连接,这个是我们自己设置好的。然后通过TCP进行十六进制命令的发送。这里我们给出相应的TCP通讯方式和十六进制语义化转化方式。

首先是TCP的通讯代码

    new Thread(new Runnable() {
            @Override
            public void run() {
                Socket socket = null;
                OutputStream os = null;
                try {
                    //准备工作
                    socket = new Socket("10.10.100.254", 8899);
                    os = socket.getOutputStream();
                    InputStream is = socket.getInputStream();
                    //写入数据
                    byte[] sendInfo = hexStrToBinaryStr("68 00 00 00 00 00 80 68 01 00 51 16");
                    os.write(sendInfo);
                    //读取数据
                    byte[] data2 = new byte[86];
                    if ((is.read(data2))!=-1){
                        //获取返回值
                        String getInfo = byteArrToHex(data2);
                        Log.i("aaaaaaaaaaaaaaaa", getInfo);
                    }
                    is.close();
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

接着是十六进制数和语义化字符串的转化

    private static final char HexCharArr[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    /**
     * 字节数组转化为十六进制字符串
     * @param btArr
     * @return
     */
    public static String byteArrToHex(byte[] btArr) {
        char strArr[] = new char[btArr.length * 3];
        int i = 0;
        for (byte bt : btArr) {
            strArr[i++] = HexCharArr[bt >>> 4 & 0xf];
            strArr[i++] = HexCharArr[bt & 0xf];
            strArr[i++] = ' ';
        }
        return new String(strArr);
    }

    /**
     * 将十六进制的字符串转换成字节数组
     *
     * @param hexString
     * @return
     */
    public static byte[] hexStrToBinaryStr(String hexString) {
        if (TextUtils.isEmpty(hexString)) {
            return null;
        }
        hexString = hexString.replaceAll(" ", "");
        int len = hexString.length();
        int index = 0;
        byte[] bytes = new byte[len / 2];
        while (index < len) {

            String sub = hexString.substring(index, index + 2);

            bytes[index / 2] = (byte) Integer.parseInt(sub, 16);

            index += 2;
        }
        return bytes;
    }

这样就可以进行硬件的相关交互。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值