官网:https://developer.android.com/training/tv/start/hardware.html

电视硬件与其他Android设备明显不同。电视不包括一些其他Android装置,诸如触摸屏,摄像头,以及GPS接收器。为了让用户与电视应用进行互动,他们必须使用一个遥控器或游戏手柄。当你建立了一个电视应用程序,你必须仔细考虑硬件的限制和在电视上运行的硬件要求。

检查电视设备

下面的代码用于检查app是否运行在电视设备上  (在某机顶盒上测试发现,返回的是UI_MODE_TYPE_NORMAL)
public static final String TAG = "DeviceTypeRuntimeCheck";UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {Log.d(TAG, "Running on a TV Device")
} else {Log.d(TAG, "Running on a non-TV Device")
}

处理不支持的硬件特性

电视不支持的硬件特性

Hardware Android feature descriptor
Touchscreen android.hardware.touchscreen
Touchscreen emulator android.hardware.faketouch
Telephony android.hardware.telephony
Camera android.hardware.camera
Near Field Communications (NFC) android.hardware.nfc
GPS android.hardware.location.gps
Microphone [1] android.hardware.microphone
Sensors android.hardware.sensor
Screen in portrait orientation android.hardware.screen.portrait

参考 特性完整表

声明需要的硬件特性

Android应用程序可以声明硬件功能要求在应用程序清单,以确保他们不被安装在不提供这些功能的设备上。
如果你是扩展现有应用程序使用在电视上,仔细检查你的应用程序的清单上的任何硬件要求声明,它们可能会阻止应用被安装在一个电视设备上。
<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"/>

声明权限(硬件特性需要)

一些硬件特性暗示了需要相应的权限
Permission Implied hardware feature
RECORD_AUDIO android.hardware.microphone
CAMERA android.hardware.camera and 
android.hardware.camera.autofocus
ACCESS_COARSE_LOCATION android.hardware.location and 
android.hardware.location.network
ACCESS_FINE_LOCATION android.hardware.location and 
android.hardware.location.gps

检查硬件可用性

例:
// Check if the telephony hardware feature is available.
if (getPackageManager().hasSystemFeature("android.hardware.telephony")) {Log.d("HardwareFeatureTest", "Device can make phone calls");
}// Check if android.hardware.touchscreen feature is available.
if (getPackageManager().hasSystemFeature("android.hardware.touchscreen")) {Log.d("HardwareFeatureTest", "Device has a touch screen.");
}

关于GPS

电视是静止的,室内设备,没有内置的全球定位系统(GPS)接收器。如果您的应用程序使用位置信息,您仍然可以允许用户搜索一个位置,或使用一个静态位置提供者,如邮政编码在电视设备的配置设置。
// Request a static location from the location manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation("static");// Attempt to get postal or zip code from the static location object
Geocoder geocoder = new Geocoder(this);
Address address = null;
try {address = geocoder.getFromLocation(location.getLatitude(),location.getLongitude(), 1).get(0);Log.d("Zip code", address.getPostalCode());} catch (IOException e) {Log.e(TAG, "Geocoder error", e);
}

配置改变处理

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

Android TV开发(二)处理TV硬件相关推荐

  1. Android画板开发(二) 橡皮擦实现

    Android画板开发(一) 基本画笔的实现 Android画板开发(二) 橡皮擦实现 Android画板开发(三) 撤销反撤销功能实现 Android画板开发(四) 添加背景和保存画板内容为图片 A ...

  2. 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置...

    今天一个开发者问到我为什么游戏开发要删除项目下的hdpi.mdpi和ldpi文件夹:下面详细给大家解答一下: 首先童鞋们如果看过我写的<[Android游戏开发二十一]Android os设备谎 ...

  3. Android 蓝牙开发(二) --手机与蓝牙音箱配对,并播放音频

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 上一章中,我们已经学习了传统蓝牙的开发,这一章,我们来学习如 ...

  4. 【Android游戏开发二十二】(图文详解)游戏中灵活实现动画播放!简述J2me的游戏类库与Android游戏开发!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明:(作者新浪微博: @李华明Himi ) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/andr ...

  5. 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/374.html L ...

  6. CSDN Android客户端开发(二):详解如何基于Java用Jsoup爬虫HTML数据

    本文参考鸿洋大大的链接详细介绍如何使用Jsoup包抓取HTML数据,是一个纯java工程,并将其打包成jar包.希望了解如何用java语言爬虫网页的可以看下. 杂家前文就又介绍用HTTP访问百度主页得 ...

  7. 嵌入式Android底层开发(三)硬件访问服务框架

    一.简单的Android应用程序调用硬件流程图(通过JNI接口直接访问) 但这样存在一个很大的问题:访问仅限与单一程序进行访问,如果多个APP同时访问一个硬件资源(多个APP都需要在LCD进行显示.多 ...

  8. 【Android游戏开发二十五】在Android上的使用《贝赛尔曲线》!

    首先对于<赛贝尔曲线>不是很了解的童鞋,请自觉白度百科.google等等... 为了方便偷懒的童鞋,这里给个<贝赛尔曲线>百科地址,以及一段话简述<贝赛尔曲线>: ...

  9. Android添加拍照功能,Android相机开发(二): 给相机加上偏好设置

    Android Camera Develop: add settings to camera app 概述 继上一篇实现了一个最简单的相机APP后,本篇主要介绍实现相机的各种偏好设置,比如分辨率.闪光 ...

最新文章

  1. eselasticsearch入门_ElasticSearch入门学习-基础示例(1)
  2. C++中关键字的理解--Static
  3. 全球及中国无菌粉末注射用橡胶塞行业运营模式分析及产销需求预测报告2021年版
  4. oracle删除分区空间,Oracle 11g维护分区(三)——Dropping Partitions
  5. list 分组_「正则表达式」 匹配分组
  6. 各家银行黄金T+D业务比较
  7. 打印pdf文件 vfp_新技能,如何将多份pdf电子发票文件合成一份文档打印
  8. mapper mysl实现批量插入 更新
  9. 重大安全事件 | Ubuntu 16.04.4 暴本地提权漏洞
  10. 剑指前端(前端入门笔记系列)——Date对象
  11. react 使用iconfont 图标
  12. pr如何处理音效,如何让你的声音变得干净又清晰?PR音频降噪教程
  13. Diango+Vue+mysql开发数据看板视图
  14. 李飞飞:我怎样走上 AI 研究之路的?
  15. iApp免费后台:云A后台
  16. mqdf python_GitHub - jugg1024/court_recognition
  17. spark 和 elk 技术栈对比?
  18. 关于pc手机端自适应开发的一些记录
  19. small team
  20. EfficientNet迁移学习(四) —— 损失函数解析

热门文章

  1. android 游戏 锁屏界面开发,android 锁屏程序开发
  2. Android 8.1拨号如何实现默认免提
  3. 编程统计候选人的得票数。设有3个候选人,Li,Zhang,Fun。 要求输入投票总数n,然后每次输入一个得票的候选人的名字(区分大小写),若选民输错候选人姓名,则按废票处理。 选民投票结束后程序自动显
  4. 【ssmp】springboot综合开发——图书管理系统【CRUD】
  5. 群雄逐鹿 百家争鸣 | 华云数据荣获2021信创“大比武”总决赛全国第二名
  6. ES6的 for of 循环详解
  7. 3. JS生成32位随机数
  8. Linux应用开发4 如何获取系统参数信息(监测终端信息)
  9. 2020河南会考计算机成绩查询,2020河南中考成绩查询入口【已开通】
  10. 2020会考计算机成绩查询,初中会考成绩查询2020