最近完成了一个TV端的项目,大致包括影视、直播观看,手机投屏操控,内容分类推荐等功能,解决了一些坑,但同时也挖了好多(逃(●'◡'●),在此简单记录一下

1.foucus焦点问题:

简单基础的view通过android:focusable="true"、android:nextFocusLeft=""、设置selector背景等属性就可以搞定,但如果你要实现复杂布局(或者嵌套布局)的recyclerview或者listview,那就需要自己重写事件处理了。当然你和我一样懒得话,可以使用google的leanback库,不过这样可客制化的空间就变小了,个人也不是很推荐使用吧,有利有弊,具体怎样使用下面解释。

2.播放器IjkPlayer问题

主要就是so库蛋疼的编译问题。。。如果你是windows电脑的话基本可以不用自己编译了,可以在这做一回伸手党拿到so库,接下来就是自己把IjkPlayer封装成一个自定义的framelayout,根据需求处理其各种回调(缓冲、暂停、启动、重播、后台、出错、完成等等),开心的是TV端只要做一些最简单的播放操作就可以了,至于弹幕、旋转、音量、亮度等完全不需要考虑。

播放结束后记得relase播放器即可。

3.手机投屏、操控问题解决

采用了NSDManager+AsyncHttpServer开源库的方式起长连接完成。简单解释下就是:

---------------------Server(TV端)--------------------------------------------

1.后台service起一个AsyncHttpServer

2.配置NsdServiceInfo的端口号、协议类型、协议名等信息,并注册NSDManager Service (等待client 来扫描连接)

---------------------Client(手机端)---------------------------------------

3.注册NsdManager.DiscoveryListener(扫描),及NsdManager.ResolveListener(扫描条件满足后的连接listener)

4.连接socket

5.发送交互信息

连接完之后,我们就能自定义上层信息协议了(通过setStringCallback,解析不同string完成不同操作)。比如说用户token传递、投屏影片url传递,完全只需要加密过后以string的方式传递过来,server解析后跳转对应界面就行了。至于远程遥控功能,目前我是使用Instrumentation来发送虚拟按键,从而完成手机遥控。

4.界面展示与网络请求数据

由于TV端一般都是采用tab标签+fragment的形式,而且数据一般不会短时间内变化,所以最好不要频繁刷新数据与view,请求一次后如果没有触发刷新事件,你就可以一直用这次的response,fragment也只需要hide即可。

5.leanback相关使用问题

主要是针对VerticalGridFragment的定制,实现这样一个界面,并可以将focus移动到上方tab的位置。

我的收藏.png

官方demo也比较清楚,要实现这样一个效果,只需要照着它的模板去实现一个PresenterSelector(如果只有一种viewtype,直接提供一个Presenter即可)和ArrayObjectAdapter即可,将网络请求的数据add进adapter就会自动去notify,主要是一些UI细节方面需要我们去改变。

加载数据前后loading界面:

getProgressBarManager().show();

getProgressBarManager().hide();

设置列数,行间距:

/**

* Created by lucky on 2017/7/17.

*/

public class CustomVerticalGridPresenter extends VerticalGridPresenter {

private VerticalGridView gridView;

public CustomVerticalGridPresenter(int focusZoomFactor) {

super(focusZoomFactor);

}

@Override

protected void initializeGridViewHolder(ViewHolder vh) {

super.initializeGridViewHolder(vh);

gridView= vh.getGridView();

int top= DensityUtil.dip2px(vh.getGridView().getContext(),25);//this is the new value for top padding

int bottom= gridView.getPaddingBottom();

int right= gridView.getPaddingRight();

int left= gridView.getPaddingLeft();

gridView.setPadding(left+top,top,right+top,bottom+top);

gridView.setHorizontalSpacing(top);

gridView.setVerticalSpacing(top);

}

}

接着在VerticalGridFragment中:

CustomVerticalGridPresenter gridPresenter = new

CustomVerticalGridPresenter(ZOOM_FACTOR);

gridPresenter.setNumberOfColumns(COLUMNS);

setGridPresenter(gridPresenter);

VerticalGridFragment顶层控件不能向上导航focus,如上图中焦点无法移动到我的收藏那一行item:

可以重写一个一模一样的lb_vertical_grid_fragment,自己写的布局会覆盖掉系统的布局,再将BrowseFrameLayout重写成我们自己的BrowseFrameLayout。

主要是因为VerticalGridFragment中的父布局拦截了事件,详细原因可以看这

Android tv开发px,【Android】TV端项目开发挖坑总结相关推荐

  1. java项目_好程序员Java分享从入门到服务端项目开发的过程

    好程序员Java分享从入门到服务端项目开发的过程,对于打算入门或者刚刚入门学习Java的人来说,刚开始接触这门学科,往往会觉得不知所措,也会觉得很迷茫.结合前人经验,就从入门到进阶对于Java的学习而 ...

  2. 从Unix开源开发学习应对大型复杂项目开发

    封装与抽象 在 Unix.Linux 系统中,有一句经典的话,"Everything is a file",翻译成中文就是"一切皆文件".这句话的意思就是,在 ...

  3. java项目开发实战入门电子书,java项目开发实战入门全彩版

    <JaWeb项目开发实战入门>以企业门户网.51商城.BBS--程序源论坛.YouKnow问卷.OA办公自动化系统.铭成在线考试系统.K12(中小学)综合测评系统和Show--企业个性化展 ...

  4. 浅谈软件开发工具CASE在软件项目开发中发挥的作用认识

    浅谈软件开发工具CASE在软件项目开发中发挥的作用认识 内容摘要:阐述了CASE工具作为 一种开发环境在软件项目开发中所起到的开发及管理作用.CASE工具实际上是把原先由手工完成的开发过程转变为以自动 ...

  5. 魔方APP项目-01-移动端开发相关概念、移动端自适配、元信息(meta)、开发准备、移动端项目搭建(模拟器调试)、APICloud(APICloud 前端框架,获取服务端API接口)

    一.移动端开发相关概念 1.APP类型 ①.Native APP Native APP又称原生APP,就是我们平时说的手机应用软件. 原生APP 是针对IOS.Android.Windows等不同的手 ...

  6. React Native Expo开发的OW移动端项目

    iOS演示 开源地址 GitHub Gitee 项目地址 Andorid 版 Android Expo 版(需 Expo 移动端(Android/iOS)) Expo 简介 项目基于Expo的 Rea ...

  7. Vue 移动端项目开发流程

    目录 移动端电影项目 1.项目效果 2.开发项目流程 3.开发环境 4.初始化项目 5.vant 移动端组件库 介绍 5.5.1.安装 5.5.2.自动按需引入组件 (推荐) 5.5.3.移动端样式设 ...

  8. python移动端web开发代码_移动web前端开发,前端开发工作总结,移动端页面开发-我主页-一个前端程序猿的博客...

    热门推荐 html/css 一.escape和它们不是同一类简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读.编码之后的... 标签: 0 ...

  9. python项目开发实战网盘-python项目开发实战 第2版

    python项目开发实战 第2版是一本Python项目开发流程实战手册,由日本BePROUD股份有限公司编著.本书的内容全部基于python开发事实,全部都是BeProud员工实际尝试.实践过的,可以 ...

最新文章

  1. 微信开发之自动回复图文消息
  2. 打印机更换感光鼓单元k_SOHO打印机基础培训(成像原理)
  3. mysql架设_服务器架设MySQL开发规范与使用技巧
  4. 线上服务CPU100%问题快速定位实战(转载公众号:架构师之路)
  5. 【NOIP模拟题】“与”(位运算)
  6. 3d数学基础图形与游戏开发 英文版_1850款文字标题字幕条,AE图形预设包,logo生成神器...
  7. python使用的一些小事儿
  8. Python_软件安装
  9. hping3安装及使用
  10. 2022.08.09-docker容器网络配置-左冕
  11. 软考:McCabe环路复杂度计算方法
  12. web绿色服务器单文件,Web个人临时共享服务器
  13. 【EXCEL】表格中固定行列 冻结窗口怎么是灰色的
  14. WordPress的.htaccess优化技巧是什么
  15. 2012第33周国内Android应用下载动态
  16. HHUOJ 1389 出栈合法性
  17. Windows 10 无法设置代理
  18. 大数据如何改变我们的国庆假期?
  19. 数据分析Excel必备技能:数据透视表使用教程
  20. STM8驱动0.96寸OLED(12864液晶屏)

热门文章

  1. PHP中等良好优秀,成绩优秀,中等,良好怎么分的啊?分为哪几个?
  2. ps2019布尔运算快捷键_超实用:换个角度教你快速理解PS CS6布尔运算
  3. Leetcode每日一题:141.linked-list-cycle(环形链表)
  4. 541页《利用Python进行数据分析》分享(附源码下载)
  5. 西瓜书+实战+吴恩达机器学习(二三)EM算法和变分推断
  6. 吴恩达机器学习(十五)大规模机器学习(Batch、Stochastic、Mini-batch gradient descent、MapReduce)
  7. LeetCode 545. Boundary of Binary Tree 二叉树边界
  8. 单击选定单元格后输入新内容_2015年计算机一级msoffice考前简答题练习
  9. MyBatis入门到精通——Mybatis入门篇
  10. Spring Boot + Activiti 在浏览器显示工作流图