原创不易,尊重作者,转载请注明出处
前言
如果你初步开发TV端,那么你首先需要了解一些有关Android TV APP小知识点。
目录
- 对电视硬件的认知
- 检查APP运行的环境是否是TV端
- 通常TV端不支持的硬件特性
- 控制器断开重连
对电视硬件的认知
不同于在手机上开发App,大多数电视没有手机那么多丰富的硬件特性,例如触屏、摄像头、GPS等功能,我们在使用电视时,一般都是借助遥控器或游戏手柄等外设。当我们开发TV端的App时,需要考虑电视的硬件支持。
检查APP运行的环境是否是TV端
/**
* 是否运行在TV端
* @param context
* @return
*/
public static boolean isRunTvClient(Context context) {
UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE);
return uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
}
TV端可能不支持的硬件特性
如下表所示:
功能 | 硬件 | 描述符号 |
---|---|---|
触摸屏 | Touchscreen | android.hardware.touchscreen |
模拟点击 | Touchscreen emulator | android.hardware.faketouch |
电话 | Telephony | android.hardware.telephony |
相机 | Camera | android.hardware.camera |
NFC | Near Field Communications | android.hardware.nfc |
定位 | GPS | android.hardware.location.gps |
麦克风 | Microphone | android.hardware.microphone |
传感器 | Sensors | android.hardware.sensor |
纵向屏幕 | Screen in portrait orientation | android.hardware.screen.portrait |
Tips:智能电视一般遥控器会有麦克风,不同于电视中的麦克风硬件,遥控器的麦克风是完全支持的,家里有智能电视的朋友应该更清楚。
如果我们的App只是在TV端运行,那么在开发中,我们应该检查AndroidManifest,因为如果在AndroidManifest中有申明了电视不支持的特性,那么很有可能会阻止安装在TV端上。我们可以通过以下代码来申明不使用该硬件特性。
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.hardware.faketouch"
android:required="false" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.nfc"
android:required="false" />
<uses-feature
android:name="android.hardware.location.gps"
android:required="false" />
<uses-feature
android:name="android.hardware.microphone"
android:required="false" />
<uses-feature
android:name="android.hardware.sensor"
android:required="false" />
随着电视硬件的升级,有些硬件特性被应用在智能电视端中,例如摄像头、麦克风功能等(例如华为智慧屏),那么当我们需要使用某些特性时,就需要手动去检查是否支持,这样才能适配不同的电视端。
/**
* 如果TV端支持摄像头
*/
if (context.getPackageManager().hasSystemFeature("android.hardware.camera")) {
} else {
}
控制器断开重连
大多数智能电视的遥控器或者游戏手柄都是蓝牙连接,这些设备可能为了省电在一定时间无操作的情况下会进入睡眠模式导致与TV端断开连接。如果我们没有处理连接事件,这可能会导致我们的App被中断或重启,以下方式是常见的断开情景:
- 看视频电影时
- 等待游戏开始时,另一名玩家使用是不同的游戏控制器
- 当在游戏中时,玩家离开游戏并断开游戏控制器
解决办法也很简单,我们可以在AndroidManifest中对Activity通过configChanges配置相应的变化
<activity android:name="com.fynnjason.tv.MainActivity"
android:configChanges="navigation"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
网友评论