Android TV开发总结(一)构建一个TV app前要知道的事儿
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52792562
前言:近年来,智能电视的发展如火如荼,Googel 也在大力推进TV及穿带设备的发展,在互联网的风口,是猪也会飞,这句话并不是没有道理的。传统电视机厂商,基本都转型致力于智能电视的相关业务。
- 处理电视硬件
- app上检查电视设备
- 处理不支持的硬件features
- Declaring hardware requirements for TV
- 声明权限意味着硬件要具有该特性
- 检查硬件Features
- 处理控制器断开场景
处理电视硬件
电视硬件是大大不同于其他Android设备。电视不包括其他Android设备上发现的一些硬件特性,如触屏,摄像头,GPS接收器。电视也完全依靠辅助硬件设备。为了让用户与电视应用程序交互,他们必须使用一个遥控器或游戏手柄。当你为电视构建一个应用程序,你必须仔细考虑硬件操作电视硬件的限制和要求。
app上检查电视设备
如果您正在构建一个app运行在TV设备和其他设备,你也许需要去check你的app运行在什么样的设备上且可能将在你的app做何种操作。
例如,如果您有一个app被Intent启动,你的应用应当被检查设备属性去确定是否能启动在TV下的activity或者是在手机上的activity.
推荐一种方法来确定你的app是否运行在一个TV设备下,
通过使用UiModeManager.getCurrentModeType()方法来检查该设备是否在TV模式下运行。
下面的示例代码显示了如何检查你的应用程序是否运行在一个TV设备:
处理不支持的硬件features
根据应用程序的设计和功能,你可以解决某些硬件功能不可用。了解什么硬件特性通常不用于电视,如何检测丢失的硬件特性,并建议使用这些特性。
- 不支持的电视硬件特性
电视相比其他设备有着不同的作用,所以它们没有其他android设备通常有的一些硬件特性。出于这个原因,Android系统不支持电视设备有以下特点:
| 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 |
一些电视控制器有一个麦克风,麦克风不一样的硬件功能描述。控制器麦克风完全支持。
Declaring hardware requirements for TV
Android应用程序可以声明硬件功能要求在app中Manifest,以确保他们不被安装在此app下,设备不提供这些功能。如果你是扩展现有应用程序使用在电视上,仔细检查你的应用程序的清单,因为任何硬件requirements声明可能阻止它被安装在一个TV设备上。
如果您的应用程序使用硬件特性(如触摸屏或相机),不可用在TV上,但可以不使用这些功能,修改你的应用程序的清单,表明这些特性被应用程序不需要。以下清单代码片段演示了如何声明应用程序不需要硬件特性不可用在电视设备,即使没有电视设备上的应用程序可以使用这些功能:
一些features像android.hardware.camera subfeatures.front,在feature引导时,确保标识required=”false” 在任何子features中,因为也许会使用在app中
所有应用在电视上使用,app必须声明中描述的触摸屏功能不需要使用。如果您的应用程序通常使用上面列出的一个或多个特性,在你的清单文件中,改变这些features像android:required attribute setting为false,
警告:声明一个hardware 的feature可通过设置一些属性值为true,避免你的app能安装在TV 设备或出现在Android TV的launcher启动页上
一旦你决定让你的硬件特性可选应用程序,您必须在运行时检查这些功能的可用性,然后调整你的应用程序的行为。
声明权限意味着硬件要具有该特性
一些uses-permission清单声明意味着硬件特性。这种行为意味着请求一些应用程序权限清单可以包含你的app从TV设备上安装和使用。下面的一般要求权限创建隐式硬件功能要求:
| Permission | Implied hardware feature |
|---|---|
| RECORD_AUDIO | android.hardware.microphone |
| CAMERA | android.hardware.camera and android.hardware.camera.autofocus |
| ACCESS_COARSE_LOCATION | android.hardware.location android.hardware.location.network (Target API level 20 or lower only.) |
| ACCESS_FINE_LOCATION | android.hardware.location android.hardware.location.gps (Target API level 20 or lower only.) |
完整的许可列表请求,意味着硬件功能要求,看到uses-feature指南。如果你的应用程序请求上面列出的特性之一,uses-feature声明包含在您的清单隐含的硬件功能,表明它不是必需的(android:required=“false”)。
注意:如果你的目标app运行Android 5.0(API级别21)或更高版本,并使用ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限,用户仍然可以安装你的应用电视设备,即使电视设备没有网卡或GPS接收器。
检查硬件Features
Android框架可以告诉你如果没有可用的硬件特性在设备上,应用程序正在运行。使用hasSystemFeature(String)方法在运行时检查特定的功能。该方法接受一个字符串参数,指定您想要的功能检查。
下面的代码示例演示了如何在运行时检测硬件features的可用性:
Touch screen
因大多数电视没有触摸屏,Android不支持触屏交互电视设备。此外,使用一个触摸屏不符合观看环境中用户坐在远离显示10英尺。确保你的UI元素和文本不需要或暗示触摸屏的使用。
电视上的设备,你应该设计你的应用程序使用这个交互模型通过支持导航用定向杆(方向键)在一个电视遥控器。
Camera
虽然电视通常没有相机,你仍然可以提供一个photography-related电视应用。例如,如果您有一个应用程序需要,视图和编辑照片,您可以禁用它的拍照功能电视甚至还允许用户查看和编辑照片。如果你决定让camera-related应用在电视工作,添加以下功能声明应用程序清单:
如果你没有摄像头,使应用程序的运行代码添加到您的应用程序,检测如果相机功能可用,使调整应用程序的操作。下面的代码示例演示了如何检测相机的存在:
GPS
TV是静止的,室内设备,没有内置的全球定位系统(GPS)接收器。如果您的应用程序使用位置信息,您仍然可以允许用户搜索一个位置,或使用一个静态位置提供者如邮政编码在电视设备的配置设置。
Handling Controllers
TV设备需要辅助硬件设备与应用程序进行交互,一个基本形式的远程控制器或游戏控制器。这意味着您的应用程序必须支持方向键输入。这也意味着意味着你的app需要处控制器离线和外置设备(如键盘)输入,而不是一种类型的控制器(普通遥控器)。
方向键最低控制
电视设备的默认控制器是一个方向键。一般来说,应用程序应该是可操作的,只有从一个远程控制器,下,左,右,选择,和home键。如果你的应用是一种游戏,通常需要与额外的游戏控制器控制,应用程序应该试图让游戏与这些方向键控制。在这种情况下,应用程序也应该提醒用户需要一个控制器和允许他们使用方向键控制器优雅地退出你的游戏。
处理控制器断开场景
TV上控制器可能会断开,如蓝牙设备可能会为省电而有周期性的进入睡眠模式或从TV设备上断开。这意味着应用程序可能被中断或重启如果没有配置为处理这些连接事件。这些事件可以发生在有下列情形之一的:
- 当在看一个几分钟长的视频是,方向键或游戏控制器进入睡眠模式,从电视设备断开连接,然后重新连接时。
- 当在游戏中,一个新玩家加入游戏使用一个不是当前连接的游戏控制器。
- 当在游戏中,玩家离开游戏并断开游戏控制器。
任何TV上的app中activity 是以断开和重连接事件为条件的,必须配置去处理重连接事件在app中Mainfest文件中,下面的代码示例演示了如何启用一个Activity来处理配置的变化,包括键盘或导航设备连接,断开,或重新连接:
第一时间获得博客更新提醒,以及更多android干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。
如果你觉得好,随手点赞,也是对笔者的肯定,也可以分享此公众号给你更多的人,原创不易
Android TV开发总结(一)构建一个TV app前要知道的事儿的更多相关文章
- Android TV开发总结(六)构建一个TV app的直播节目实例
请尊重分享成果,转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52966319 近年来,Android TV的迅速发展,传统的有线电视受 ...
- Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52835829 前言:上篇中,&l ...
- Android TV开发总结(七)构建一个TV app中的剧集列表控件
原文:Android TV开发总结(七)构建一个TV app中的剧集列表控件 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必转载 ...
- 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误
转载于:https://blog.csdn.net/aqi00/article/details/73065392 资源下载 下面是<Android Studio开发实战 从零基础到App上线&g ...
- Android TV开发总结(二)构建一个TV Metro界面(仿泰捷视频TV版)
前言:上篇是介绍构建TV app前要知道的一些事儿,开发Android TV和手机本质上没有太大的区别,屏大,焦点处理,按键处理,是有别于有手机和Pad的实质区别.今天来介绍TV中Metro UI风格 ...
- Android TV开发总结(四)通过RecycleView构建一个TV app列表页(仿腾讯视频TV版)
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52854131 前言:昨晚看锤子手 ...
- Android TV开发总结(五)TV上屏幕适配总结
前言:前面几篇总结一些TV上的小Sample,开源到GitHub:https://github.com/hejunlin2013/TVSample, 点击链接,可以持续关注.今天总结下TV上屏幕适配. ...
- 【Android Developers Training】 3. 构建一个简单UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android开发】找乐,一个笑话App的制作过程记录
缘起 想做一个笑话App的原因是因为在知乎上看过一个帖子,做Android可以有哪些数据可以练手,里面推荐了几个数据开放平台.在这些平台中无一不是有公共的笑话接口,当时心想这个可以拿来练手啊,还挺有意 ...
随机推荐
- [LeetCode] Binary Tree Longest Consecutive Sequence II 二叉树最长连续序列之二
Given a binary tree, you need to find the length of Longest Consecutive Path in Binary Tree. Especia ...
- kafka知识体系-kafka设计和原理分析-kafka文件存储机制
kafka文件存储机制 topic中partition存储分布 假设实验环境中Kafka集群只有一个broker,xxx/message-folder为数据文件存储根目录,在Kafka broker中 ...
- mybatis学习二
Mybatis缓存1:缓存的概念 当用户频繁查询某些固定 的数据时,第一次将这些数据从数据库查询出来,保存在缓存中(内存,高速磁盘)中 当下次用户再次查询这些数据时,不用再通过数据库查询, ...
- [BZOJ 2654]tree(陈立杰)
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- 2015 多校联赛 ——HDU5303(贪心)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- 两道很好的dp题目【4.29考试】
A 问题描述: 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用I表示,反之这个位置是下降的,用D表示.如排列3,1,2,7,4,6,5可以表示为DIIDID. 现 ...
- Mysql锁机制--乐观锁 & 悲观锁
Mysql 系列文章主页 =============== 从 这篇 文章中,我们知道 Mysql 并发事务会引起更新丢失问题,解决办法是锁.所以本文将对锁(乐观锁.悲观锁)进行分析. 第一部分 悲观锁 ...
- SVN提交时显示:Path is not a working copy directory
说明你地址没有checkout啊 先checkout,才能add和commi. 要是在一个已有的项目出现这个错误,就是包含这个地址的文件夹没添加进去,去上一层再试一次. 总之,养成在项目根目录提交的习 ...
- Intellij IDEA自动编译问题
对IDEA的界面很有爱,但是感到他的项目启动速度太慢了.所以查了资料做了优化. 1:开启自动测试 File->setting->compiler 勾选上上面的, 2修改run/de ...
- DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)
这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...