Android Studio TV开发教程

(转自Android官网https://developer.android.com/training/tv/start)

文章源自:光谷佳武 https://blog.csdn.net/jiawuhan/article/details/80618879


管理电视控制器

电视设备需要一个辅助硬件设备来与应用程序进行交互,形式为基本的遥控器或游戏控制器。 这意味着您的应用必须支持D-pad输入。 这也意味着你的应用程序可能需要处理离线的控制器,以及来自多种类型的控制器的输入。

本课讨论处理电视设备控制器的要求。

D-pad最低限度的控制

电视设备的默认控制器是D-pad。 一般来说,您的应用程序应该可以从仅具有上,下,左,右,选择,后退和主页按钮的遥控器操作。 如果您的应用程序是通常需要带有附加控件的游戏控制器的游戏,则您的应用程序应尝试使用这些D-pad控件进行游戏。 在这种情况下,您的应用程序还应警告用户需要控制器,并允许他们使用D-pad控制器优雅地退出游戏。 有关使用电视设备的D-pad控制器进行导航的更多信息,请参阅创建电视导航 

手柄控制器断开连接

电视控制器通常是蓝牙设备,它可能会尝试通过定期进入睡眠模式和断开电视设备来节省电量。 这意味着如果应用程序未配置为处理这些重新连接事件,则可能会中断或重新启动应用程序。 这些事件可能发生在以下任何情况下:

  • 在观看几分钟长的视频时,D-Pad或游戏控制器进入睡眠模式,断开与电视设备的连接,然后重新连接。
  • 在游戏过程中,新玩家使用当前未连接的游戏控制器加入游戏。
  • 在游戏过程中,玩家离开游戏并断开游戏控制器。

任何可能断开和重新连接事件的TV应用程序活动都必须配置为处理应用程序清单中的重新连接事件。 以下代码示例演示了如何启用活动来处理配置更改,包括连接,断开连接或重新连接的键盘或导航设备:

  android:name="com.example.android.TvActivity"  android:label="@string/app_name"  android:configChanges="keyboard|keyboardHidden|navigation"  android:theme="@style/Theme.Leanback">       android:name="android.intent.action.MAIN" />     android:name="android.intent.category.LEANBACK_LAUNCHER" />    ...

此配置更改允许应用继续通过重新连接事件运行,而不是由Android框架重新启动,这不是一个好的用户体验。

处理D-pad输入变化

电视设备用户可能有多种类型的控制器,他们使用他们的电视。 例如,用户可能同时拥有基本的D-pad控制器和游戏控制器。 游戏控制器在用于D-pad功能时提供的键码可能与物理D-pad发送的键码不同。

你的应用程序应该处理来自游戏控制器的D-pad输入的变化,所以用户不必物理地切换控制器来操作你的应用程序。 有关处理这些输入变化的更多信息,请参阅处理控制器操作 

处理按钮事件

当用户点击控制器上的按钮时,您的应用会收到一个带有KeyEvent的事件。 该按钮的预期行为可能是媒体事件(如播放,暂停或停止),也可能是电视类型的事件(如选择或导航)。 为了提供良好的用户体验,您的应用应该为控制器按钮分配一致的行为。

电视用户界面事件

生成这些KeyEvent的按钮应该由应用根据下表处理。

KeyEvent的 行为
BUTTON_B,BACK 背部
BUTTON_SELECT,BUTTON_A,ENTER,DPAD_CENTER,KEYCODE_NUMPAD_ENTER 选择
DPAD_UP,DPAD_DOWN,DPAD_LEFT,DPAD_RIGHT 导航

媒体活动

当用户正在观看媒体时,生成这些KeyEvent的按钮应按照下表处理。 如果您的应用程序正在控制MediaSession,它应该调用其中一个TransportControls方法,如下所示。 请注意,选择按钮在这种情况下充当播放/暂停按钮。

KeyEvent的 TransportControls调用 行为
BUTTON_SELECT,BUTTON_A,ENTER,DPAD_CENTER,
KEYCODE_NUMPAD_ENTER
pause()
BUTTON_START,BUTTON_SELECT,BUTTON_A,ENTER,
DPAD_CENTER,KEYCODE_NUMPAD_ENTER
pause() 暂停
BUTTON_R1 skipToNext() 跳到下一个
BUTTON_L1 skipToPrevious() 跳到上一个
DPAD_RIGHT,BUTTON_R2,AXIS_RTRIGGER,AXIS_THROTTLE fastForward() 快进
DPAD_LEFT,BUTTON_L2,AXIS_LTRIGGER,AXIS_BRAKE rewind() 倒带
(没有KeyEvent与Stop关联) stop() 停止

处理游戏的控制器

支持D-pad控制

由于此控件集是Android TV设备的默认设置,因此围绕方向键盘(D-pad)控件规划控制方案。 玩家需要能够在游戏的各个方面使用D-Pad,而不仅仅是控制核心游戏玩法,还需要导航菜单和广告。 出于这个原因,您还应该确保您的Android TV游戏不涉及触摸界面。 例如,Android TV游戏不应该告诉玩家“ 点击此处继续”。

如何塑造播放器与控制器的交互可能是实现卓越用户体验的关键:

  • 预先沟通控制器要求  使用您的Google Play说明与玩家沟通对控制器的任何期望。 如果一个游戏比一个只有一个D-pad的游戏手柄更适合于游戏手柄,请明确说明这一点。 使用不合适的控制器进行游戏的玩家很可能会有次级体验,并在评分中惩罚您的游戏。
  • 使用一致的按钮映射  直观灵活的按钮映射是获得良好用户体验的关键。 例如,您应该使用A按钮接受 ,并按下B按钮取消 ,以遵守接受的海关。 您还可以提供可重新映射形式的灵活性。 有关按钮映射的更多信息,请参阅处理控制器操作 
  • 检测控制器功能并据此进行调整  向控制器查询其功能以优化控制器和游戏之间的匹配。 例如,您可能希望玩家通过在空中挥动控制器来引导物体。 如果玩家的控制器缺乏加速计和陀螺仪硬件,挥手将无法工作。 所以,你的游戏应该查询控制器,如果不支持运动检测,切换到另一种可用的控制方案。 有关查询控制器功能的更多信息,请参阅Android版本的支持控制器 

提供适当的后退按钮行为

后退按钮不应该充当切换。 例如,不要用它来打开和关闭菜单。 它应该仅通过前一个屏幕(例如:游戏玩法>游戏暂停屏幕>游戏主屏幕> Android主屏幕)向后导航,即面包屑式。

由于后退按钮只应执行线性(向后)导航,因此您可以使用后退按钮离开游戏内菜单(由不同的按钮打开)并返回游戏状态。 有关导航设计的更多信息,请参阅导航  要了解实施情况,请参阅提供适当的后退导航 

使用适当的按钮

并非所有游戏控制器都提供开始,搜索或菜单按钮。 确保你的用户界面不依赖于这些按钮的使用。

处理多个控制器

当多个玩家正在玩一个游戏时,每个玩家都有自己的控制器,因此映射每个玩家 - 控制器对非常重要。 有关如何实现控制器编号标识的信息,请参阅getControllerNumber() 

手柄控制器断开连接

当游戏过程中控制器断开连接时,游戏应该暂停,并且会出现一个对话框,提示断开的玩家重新连接他或她的控制器。

该对话框还应提供故障排除提示(例如,弹出对话框告诉玩家“检查您的蓝牙连接”)。 有关实现输入设备支持的更多信息,请参阅处理控制器操作  有关蓝牙连接的特定信息位于蓝牙 

显示控制器说明

如果您的游戏提供视觉游戏控制指令,则控制器图像应该没有品牌,并且只包含与Android兼容的按钮 

有关Android兼容控制器的示例图像,请下载Android TV游戏板模板(ZIP)  它包括黑色背景上的白色控制器和白色背景上的黑色控制器(如图1所示),作为PNG文件和Adobe®Illustrator®文件。

图1.使用Android TV游戏板模板(ZIP)的示例控制器说明。


更多相关文章

  1. quick cocos2d-x 与android实现更换头像
  2. Android持续集成之Jenkins 部署
  3. Android处理按钮重复点击事件
  4. 【尚观】Android游戏与应用开发最佳学习之路_转载来学习Android
  5. Cordova for android如何在App中处理退出按钮事件
  6. 8款让前端开发者心动的jQuery/CSS3应用
  7. 【Android】之【对话框 Dialog】
  8. Android——用XML的selector实现按钮多态
  9. Android学习03

随机推荐

  1. android 5.0的颜色
  2. Android, property 添加写权限。
  3. Android下PreferenceScreen 加载流程
  4. android有效的获取图像和视频
  5. Android 自定义View及其在布局文件中的使
  6. Android activity 单手操作 滑动关闭
  7. android通知栏Notification
  8. More than one file was found with OS i
  9. android 开发 @override 编译错误 解决办
  10. Android出现“Read-only file system”解