【问题标题】:How to transmit IR signal in Android如何在 Android 中传输 IR 信号
【发布时间】:2016-05-26 07:55:59
【问题描述】:

我有十六进制格式的 IR 序列,我想通过单击按钮从设备传输。我找不到任何解释如何通过示例实现它的文档。任何帮助将不胜感激。

编辑:

十六进制代码示例:E172E817(NEC 格式) 这个十六进制代码是 arduino 使用 adafruit 的 IR 库从投影仪遥控器捕获的

我已尝试使用以下代码进行传输:

consumerIRManager.transmit(70000,new int[]{57714,59415});

当我运行它时,没有错误,但它不传输任何 IR 代码。

【问题讨论】:

  • 如果在评论中给出拒绝投票的理由会很有帮助

标签: android infrared


【解决方案1】:

我相信您需要的是 GitHub 上的 AndroidInfrared 项目。它有一个特定的命令来发出 NEC Ir 命令:

 ConsumerIrManager manager = ConsumerIrManager.getSupportConsumerIrManager(context);

    // Check whether IrEmitter is avaiable on the device.
    if (!manager.hasIrEmitter()) {
        Log.e("AndroidInfraredDemo", "Cannot found IR Emitter on the device");
    }

    // Build IR Command with predefined schemes.
    IrCommand necCommand = IrCommand.NEC.buildNEC(32, 0x723F);
    manager.transmit(necCommand);

【讨论】:

  • 我已经用十六进制格式更新了问题。我们通过使用投影仪遥控器中的红外发射器打开投影仪来测试此十六进制代码。现在我想使用 android 实现相同的功能。您能否提供准确的答案来实现这一目标。
  • 仅 Hex 代码是不够的。我什至不知道这个十六进制代码代表什么或它是如何编码的。您是如何捕获此代码的?使用哪个程序或设备?它是 pronto hex 格式吗?你看到有很多问题需要回答,试着弄清楚自己也许可以在这里查看:remotecentral.com/cgi-bin/codes由于你没有提供任何源代码,我无法进一步帮助你。
  • 非常感谢。至少它传输了一些东西,尽管传输的数据与作为参数传递的十六进制代码不同(我们使用 arduino 对其进行了测试)。我想我需要更改 IrCommand 类中的一些默认值来实现它。
【解决方案2】:

检查一下

      //Check for SDK version

      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        //create an instance of ConsumerIrManager class         
      ConsumerIrManager  cIr = (ConsumerIrManager) getApplicationContext().getSystemService(Context.CONSUMER_IR_SERVICE);

         //Check weather device has the IR hardware component or not

        boolean feature_consumer_ir = cIr.hasIrEmitter();

        if (feature_consumer_ir) {
            Log.i("Test",cIr.getCarrierFrequencies().toString());
            Toast.makeText(this, "Yep this device has the IR Hardware Component", Toast.LENGTH_SHORT).show();

        }else
        { Toast.makeText(this, "This Phone Does't have any IR Hardware Component", Toast.LENGTH_SHORT).show();

        }
    }

现在如果你想发送信号使用这个

    int[] pattern=new int[2];
    pattern[0]=1000000;  // delay time in micro seconds
    pattern[1]=1000000;  // delay time in micro seconds

    int frequency=57437537;

    //call transmit method with pattern and frequency parameters using ConsumerIrManager object
    cIr.transmit(frequency, pattern);

您可以看到 IR 设备将发送信号。要了解它正在发送的天气或不将您的设备放在另一个设备的摄像头前,它会显示 IR blaster 的闪烁

注意: 现在的问题是您需要知道 IR 信号频率,即您需要对信号进行解码。

要解码 IR 信号,这可能会对您有所帮助 Is it possible to capture/receive IR signals in an Android application?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多