如何在Xamarin Android应用程序中添加对Amazon Fire TV遥控硬件的支持?

如何在Xamarin Android应用程序中添加对Amazon Fire TV遥控硬件的支持?,xamarin,xamarin.android,amazon-fire-tv,Xamarin,Xamarin.android,Amazon Fire Tv,我正在编写一个Xamarin应用程序,并已成功将其部署到我的Fire TV硬件中;然而,当我尝试使用亚马逊遥控器时,我的应用程序没有响应,因为硬件不支持点击手势,这是有道理的 我尝试过的 之后,似乎有一个消防电视组件,但当我点击链接时,发现该组件已被删除 我发现了,但它建议通过从其他一些随机项目中剥离该组件来解决使用不推荐的组件的问题,这并不理想 我看到有人提到首选方法是使用Nuget包;然而,经过一点搜索,我还没有找到任何软件包,似乎符合我所寻找的 我还看到有人提到,最新的FireOS更喜欢使

我正在编写一个Xamarin应用程序,并已成功将其部署到我的Fire TV硬件中;然而,当我尝试使用亚马逊遥控器时,我的应用程序没有响应,因为硬件不支持点击手势,这是有道理的

我尝试过的

之后,似乎有一个消防电视组件,但当我点击链接时,发现该组件已被删除

我发现了,但它建议通过从其他一些随机项目中剥离该组件来解决使用不推荐的组件的问题,这并不理想

我看到有人提到首选方法是使用Nuget包;然而,经过一点搜索,我还没有找到任何软件包,似乎符合我所寻找的

我还看到有人提到,最新的FireOS更喜欢使用Google API而不是定制的Amazon API,这让我觉得有一个“Xamarin Google Game Input”类型的nuget软件包可能会在某个地方工作,但没有找到

作为使用可能存在或不存在的Nuget软件包的一个潜在替代方案,我考虑过手动处理键盘输入和映射,使用Amazon remote上的按钮映射到键盘代码,但我不确定如何在Android(Xamarin)上实现这一点,因为我找到的所有示例都是针对Windows的

更多详细信息

当前的用户界面非常简单,点击屏幕弹出菜单,然后从三个按钮中选择一个。我认为亚马逊遥控器的图像转换应该是:按下选择按钮(中间的圆圈),然后使用方向板选择三个按钮中的一个,然后按下选择按钮

我预计还需要添加对后退按钮的支持,一旦其他输入需求得到满足,手指交叉应该会自然而然地出现

总之,我的问题是:


对于我的Xamarin Android应用程序,如何添加对Fire TV硬件附带的stock Amazon remote的支持?

要手动添加支持,以下是使其工作的要点摘要

免责声明,这是未经测试的代码。

  • 对于Android(Fire OS),在主活动中:
  • <> LI>如果有很多页面,您可以考虑在每个页扩展的抽象/基类中添加,然后每个页的自定义逻辑可以在重写<代码> PultUsSeriPin()/<代码>方法中处理。 特定页面的处理示例:

    public override async Task TheUserGaveInput(int keyCode)
    {
        if(keyCode == (int)MyKnownKeyCodes.PlayPause_FireOS ) {
            // Do something, like toggle play or pause for a video
        } 
    }
    
  • 识别当按下物理遥控器上的按钮时触发的所需钥匙码,您可以将其存储为枚举,如上例中名为
    MyKnownKeyCodes
    的钥匙码
  • 对于特定的Fire OS输入:

    // Button name = keycode
    DpadUp_FireOS = 38,
    DpadDown_FireOS = 40,
    DpadLeft_FireOS = 37,
    DpadRight_FireOS = 39,
    PlayPause_FireOS = 179,
    FastForward_FireOS = 228,
    Rewind_FireOS = 227,
    SelectDPadCenter_FireOS = 13,
    
    要支持所有其他设备,请执行以下操作:

    DpadUp = 19,
    DpadDown = 20,
    DpadLeft = 21,
    DpadRight = 22,
    Enter = 66,
    Space = 62,
    PlayPause = 85,
    Rewind = 89,
    SelectDpadCenter = 23,
    

    为了清晰起见,您还可以阅读更多相关内容。

    这难道不像添加一个KeyListener那么简单吗?正如Jason所说,按键是一种方式:为控制器查看Android TV文档:我同意,按键监听似乎是这项任务的核心机制。我目前正在进一步探索人工路线,并将公布我的发现。谢谢你的链接。你发现了什么?我也面临同样的问题。
    // Button name = keycode
    DpadUp_FireOS = 38,
    DpadDown_FireOS = 40,
    DpadLeft_FireOS = 37,
    DpadRight_FireOS = 39,
    PlayPause_FireOS = 179,
    FastForward_FireOS = 228,
    Rewind_FireOS = 227,
    SelectDPadCenter_FireOS = 13,
    
    DpadUp = 19,
    DpadDown = 20,
    DpadLeft = 21,
    DpadRight = 22,
    Enter = 66,
    Space = 62,
    PlayPause = 85,
    Rewind = 89,
    SelectDpadCenter = 23,