Android手机红外开发—点击和长按事件

上一篇文章《红外技术及Android手机红外遥控器开发》中简单介绍了红外遥控技术和Android 手机红外遥控开发操控中的点击事件,只需要按照编码协议规则对键值等进行编码解析,最后转化成数组形式表示的电平信号,调用Android红外技术API发送电平信号数组即可。

但是在实际开发过程中,不仅需要实现点击按键模拟遥控器短按,也需要模拟遥控器的长按操作。那遥控器的长按操作发送的波形电平信号又是怎样的呢?仍然以NEC6121协议来说明,对重复发送的介绍如下:

[外链图片转存失败(img-vrf9Z6dr-1567131871521)(C:\Users\10007589\AppData\Roaming\Typora\typora-user-images\1567129910862.png)]

解释一下:发送红外指令(引导码+用户码+数据码+数据反码+补齐108ms),然后发送重复指令(重复码+补齐108ms)。

代码如下:
  • 电平信号数组构造类NecPattern.java
/**
 * Created by huangr on 2019/8/8.
 * ClassName  : NecPattern
 * Description  : 构造NEC协议的pattern数组编码
 */
public class NecPattern {
   
    private static final String TAG = "NecPattern";
    
    //电平信号总时长
    private static final int TOTAL_TIME = 108000;

    //引导码
    private static final int START_H = 9000;
    private static final int START_L = 4500;
	
	//结束码
    private static final int END_L = 560;
    private static final int END_H = 2000;

    //重复码
    private static final int LOOP_H = 9000;
    private static final int LOOP_L = 2250;

    //高电平
    private static final int HIGH = 560;
    //低电平0:1125
    private static final int LOW_0 = 565;
    //低电平1:2250
    private static final int LOW_1 = 1690;

    private static int[] pattern;
    private static PatternList patternList = new PatternList();


    /**
     * 正常发码:引导码(9ms+4.5ms)+用户编码(高八位)+用户编码(低八位)+键数据码+键数据反码+结束码
     */
    public static int[] buildPattern(int userCodeH, int userCodeL, int keyCode) {
   
        //用户编码高八位00
        String userH = constructBinary(userCodeH);
        //用户编码低八位DF
        String userL = constructBinary(userCodeL);
        //数字码
        String key = constructBinaryCode(keyCode);
        //数字反码
        String keyReverse = constructBinaryCode(~keyCode);
        Log.d(TAG, " 键值 = [" + keyCode + "], 逆向编码 = [" + userH +userL+key+keyReverse+ "]");
        patternList.clear();
        //引导码
        patternList.add(START_H);
        patternList.add(START_L);
        //用户编码
        changeAdd(userH);
        changeAdd(userL);
        //键数据码
        changeAdd(key);
        //键数据反码
        changeAdd(keyReverse);
        //结束码
        patternList.add(END_L);
        patternList.add(END_H);

        int size = patternList.size();
        pattern = new 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值