原创不易,尊重作者,转载请注明出处
前言
如果你初步开发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端上。我们可以通过以下代码来申明不使用该硬件特性。
android:name="android.hardware.touchscreen"
android:required="false" />
android:name="android.hardware.faketouch"
android:required="false" />
android:name="android.hardware.telephony"
android:required="false" />
android:name="android.hardware.camera"
android:required="false" />
android:name="android.hardware.nfc"
android:required="false" />
android:name="android.hardware.location.gps"
android:required="false" />
android:name="android.hardware.microphone"
android:required="false" />
android:name="android.hardware.sensor"
android:required="false" />
随着电视硬件的升级,有些硬件特性被应用在智能电视端中,例如摄像头、麦克风功能等(例如华为智慧屏),那么当我们需要使用某些特性时,就需要手动去检查是否支持,这样才能适配不同的电视端。
/**
* 如果TV端支持摄像头
*/
if (context.getPackageManager().hasSystemFeature("android.hardware.camera")) {
} else {
}
控制器断开重连
大多数智能电视的遥控器或者游戏手柄都是蓝牙连接,这些设备可能为了省电在一定时间无操作的情况下会进入睡眠模式导致与TV端断开连接。如果我们没有处理连接事件,这可能会导致我们的App被中断或重启,以下方式是常见的断开情景:
看视频电影时
等待游戏开始时,另一名玩家使用是不同的游戏控制器
当在游戏中时,玩家离开游戏并断开游戏控制器
解决办法也很简单,我们可以在AndroidManifest中对Activity通过configChanges配置相应的变化
android:configChanges="navigation"
android:theme="@style/AppTheme">