美文网首页程序员
Android红外遥控器——长按

Android红外遥控器——长按

作者: Mitaer | 来源:发表于2018-10-19 14:57 被阅读126次

    前言

    上回书说到,常规的按键遥控发码已经实现(传送门)。一般的按键已经满足了需求,然而开关机键拥有两种功能——按一下锁屏,长按关机。一下没有思路,还是拿出“法器”揣摩揣摩。

    有图有真相

    红外线遥控编码分析仪图

    上图中,第一通道是按一下所发出的红外编码,第二通道是长按按键后发出的红外编码,可以看到,正常发码(引导码(9ms+4.5ms)+用户编码(低八位)+用户编码(高八位)+键数据码+键数据反码,在63ms已经结束了)都是一样的,区别在于后面延时码的次数。

    实践得真知

    结合红外线遥控编码分析仪图,在原有的代码基础上添加了延时码和重复码,根据实际操作发现,重复码需要3次以上设备才能响应,所以得出以下代码:

    public static void transmitKey(Context context, String key, String key2, boolean longPress) {
            if (!checkCIR(context)) {
                return;
            }
            list.clear();
            //引导码
            list.add(startH);
            list.add(startL);
            //用户编码
            change(userH);
            change(userL);
            //键数据码
            change(key);
            //键数据反码
            change(key2);
    
            //延时码
            list.add(600);
            list.add(GAP);
    
            list.add(LOOP_H);
            list.add(LOOP_L);
    
            //如果长按则添加重复码
            if (longPress) {
                for (int i = 0; i < 4; i++) {
                    list.add(650);
                    list.add(96000);
                    list.add(9600);
                    list.add(2250);
                }
            }
    
            int size = list.size();
            pattern = new int[size];
            for (int i = 0; i < size; i++) {
                pattern[i] = list.get(i);
            }
            mCIR.transmit(carrierFrequency, pattern);
        }
    

    温故而知新

    在添加了延时码后发现,上篇文章发现少一位的问题得到了解决。如果正常发码到键数据反码戛然而止,最后一位是发送不成功的。

    相关文章

      网友评论

        本文标题:Android红外遥控器——长按

        本文链接:https://www.haomeiwen.com/subject/irbyzftx.html