我正在编写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硬件随附的亚马逊远程库存的支持?
答案 0 :(得分:1)
要手动添加支持,以下是使它正常工作的要点摘要。
免责声明,这是未经测试的代码。
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);
}
*.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");
}
ProcessUserInput()
方法中处理每个页面的自定义逻辑。处理特定页面的示例:
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,
为清楚起见,您还可以阅读有关Xamarin's MessageCenter的更多信息。