【Android】TV端项目开发挖坑总结

最近完成了一个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中的父布局拦截了事件,详细原因可以看这

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容