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

时间:2018-09-10 16:10:51

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

我正在编写Xamarin应用程序,并将其成功部署到我的Fire TV硬件中;但是,当我尝试使用Amazon Remote时,我的应用程序没有响应,因为硬件不支持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手动处理键盘输入和映射,该操作将Amazon遥控器上的按钮映射到键盘代码,但是我是不确定如何在Android(Xamarin)上实现此功能,因为我发现的所有示例都在Windows下。

更多详细信息

当前的UI非常简单,点击屏幕以弹出菜单,然后选择三个按钮之一。我将图像转换为Amazon遥控器的图像将是:按下“选择”按钮(中间的圆圈),然后使用方向键选择三个按钮之一,然后按下“选择”按钮。

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

总而言之,我的问题是:

对于我的Xamarin Android应用程序,如何添加对Fire TV硬件随附的亚马逊远程库存的支持?

1 个答案:

答案 0 :(得分: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的更多信息。