【问题标题】:How to Add Support For the Amazon Fire TV Remote Control Hardware in a Xamarin Android App?如何在 Xamarin Android 应用程序中添加对 Amazon Fire TV 远程控制硬件的支持?
【发布时间】:2018-09-10 16:10:50
【问题描述】:

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

我的尝试

在关注the link on this page之后,似乎有一个Fire TV组件,但是当我点击链接时,发现该组件已被删除。

我找到了this link,但它建议通过从其他一些随机项目中删除它来使用已弃用组件,这并不理想。

我看到有人提到首选方法是使用 Nuget 包;然而,经过一番搜索,我还没有找到任何似乎与我正在寻找的包相匹配的包。

我还看到有人提到,最新的 Fire OS 更喜欢使用 Google api 而不是自定义的 Amazon api,这让我认为那里有一个“Xamarin Google Game Input”类型的 nuget 包,它可能在某个地方工作,但有没找到。

作为使用可能存在或可能不存在的 Nuget 包的潜在替代方案,我考虑过使用 this table 手动处理键盘输入和映射,将亚马逊遥控器上的按钮映射到键盘代码,但我不确定如何为 Android (Xamarin) 实现此功能,因为我发现的所有示例都适用于 Windows。

更多详情

当前的用户界面非常简单,点击屏幕拉出一个菜单,然后选择三个按钮之一。我将亚马逊遥控器的图像翻译为:按选择按钮(中间圆圈),然后使用方向键选择三个按钮之一,然后按选择按钮。

我预计还需要添加对返回按钮的支持,一旦其他输入需求得到满足,手指交叉应该自然而然。

总之,我的问题是:

对于我的 Xamarin Android 应用,如何添加对 Fire TV 硬件随附的库存 Amazon 遥控器的支持?

【问题讨论】:

标签: xamarin xamarin.android amazon-fire-tv


【解决方案1】:

要手动添加支持,这里总结了使其正常工作的要点。

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

  1. 对于 Android (Fire OS),在 MainActivity 中:
using Xamarin.Forms;

public override bool OnKeyDown([GeneratedEnum] Keycode keyCode, KeyEvent e)
{
    //Use Xamarin's event system to send the event.
    MessagingCenter.Send<MyCustomPage, int>(this, "KeyUp", (int)keyCode);
    return base.OnKeyDown(keyCode, e);
}
  1. 然后在任何页面*.xaml.cs
using Xamarin.Forms;

public void OnAppearing()
{
    MessagingCenter.Subscribe<MyCustomPage, int>(this, "KeyUp", async (sender, KeyCodeArg) =>
    {
        await TheUserGaveInput(KeyCodeArg); // do whatever you need 
    });
}

public void OnDisappearing()
{
    MessagingCenter.Unsubscribe<MyCustomPage, int>(this, "KeyUp");
}
  1. 如果有很多页面,您可以考虑在每个页面扩展的抽象/基类中添加它,然后每个页面的自定义逻辑可以在覆盖的 ProcessUserInput() 方法中处理。

特定页面的处理示例:

public override async Task TheUserGaveInput(int keyCode)
{
    if(keyCode == (int)MyKnownKeyCodes.PlayPause_FireOS ) {
        // Do something, like toggle play or pause for a video
    } 
}
  1. 确定按下物理遥控器上的按钮时触发的所需键码,您可以将其存储为枚举,例如上面示例中名为 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,

为了清楚起见,您还可以阅读有关 Xamarin's MessageCenter 的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2016-01-06
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多