Android红外遥控器——长按

前言

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

有图有真相

Android红外遥控器——长按_第1张图片
红外线遥控编码分析仪图

上图中,第一通道是按一下所发出的红外编码,第二通道是长按按键后发出的红外编码,可以看到,正常发码(引导码(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红外遥控器——长按)