安卓Tv嵌入web开发

移动端嵌入h5

  • 最近的开发需求遇到了androidios嵌入h5的开发,以及android TV 嵌入h5的开发,这种移动端通过内置浏览器嵌入h5的开发很常见,最主要的问题就是两者之间的交互,客户端调用h5的方法,h5调用客户端的方法,两者之间互相调用。
  • 嵌入开发前端需要提供app开发人员的一个打包好的html文件,包含引入的静态资源在内。或者是把前端发布到服务器,给一个urlapp的开发人员,这样也可以。

Development

  • 嵌入开发要注意的适配的问题(其它文章有写),在vue里面定义在methods的方法怎么能被客户端调用,只需要在mounted的时候将方法挂载到window,客户端就能访问到methods的方法。
  • 调用客户端的方法,客户端会提供一个句柄,我们在window对象下能访问并调用到这个方法。

//客户端调用vue方法
mounted(){
    window.initData=this.initData
},
mthods(){
    initData(){
        console.log("初始化数据")
    }
}


//vue调用客户端方法,由app开发人员提供,不需要前端操心
    if (ISANDROID) //调用安卓
    {
        window.AnalyticsWebInterface.showErrorFunction();
    }
    else
    {
        window.webkit.messageHandlers.ShowErrorFunction.postMessage(obj); //调用ios
    }

Android Tv嵌入h5

  • 安卓Tv嵌入h5的开发和手机安卓嵌入开发问题要多一些,Tv的安卓版本一般比较老,更新慢,品牌多适配测试的难度大,一般只测试主流电视品牌。
  • 最近有一个这样的需求,嵌入交互的方式和手机一样,只不过TV多了个遥控器,通过遥控器来和h5交互。TV的遥控器的键值对应js的几个键值,起初是想监听onkeydown事件通过键值执行对应的交互,在实现的过程中发现了一个问题,遥控器选中一个元素高亮,enter键按下事件触发,同时也会触发别的事件,有时候触发,有时候不触发,困扰了一段时间,查阅资料发现Tv webview 加载h5以后遥控器操控会自动获取焦点,按键就会触发绑定在元素上的事件,所以需要将高亮的元素获取焦点,就不会触发别的元素绑定的事件。用到了vue-tv-focusable文档地址

Development

  • 使用vue-tv-focusable也比较简单下载引入,在元素要获取焦点的元素设置v-focusable,设置 v-focusable就相当于 android 上设置了 android:focusable=“true”,当用户按遥控器时,该库会像android那样自动把焦点移动到下一个焦点上,无需开发者处理。手动通过this.$tv.requestFocus(Element)设置哪个元素获取焦点,注意遥控器上下左右操控会默认查找元素获取焦点,使用这个方法可以使用setTimeout延迟100ms调用。
  • 元素过多可以设置滚动this.$tv.setScrollEl(element)element容器包含滚动的内容。
  • 获取到焦点的元素会有一个focused属性,设置了v-v-focusable,会有一个focusable属性。具体的操控逻辑实现还是监听onkeydown,判断键值来交互。
  • 具体使用查看文档
npm i tv-focusable

main.js

import focusable from 'vue-tv-focusable';
Vue.use(focusable);

<template>
    <div v-focusable ref="menu">
        菜单
    </div>
</template>

<script>
    export default {
        data(){
            return{

            }
        },
        mounted(){
            this.init()
        },
        methods:{
            init(){
                this.$tv.requestFocus(this.$refs.menu)
            }
        }
    }
</script>


//清除
this.$tv.resetScrollEl();
this.$tv.resetFocusClassName();
this.$tv.resetFindFocusType();
this.$tv.resetInitDis();
this.$tv.resetKEYS();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 练习材料:Lesson 12​ Goodbye and good luck I was having dinner...
    案岱简诺阅读 786评论 0 1
  • 感冒真的加重了。身热烦热,出汗后不轻反重。 显然不是伤寒所致。若是伤寒,发汗即为解表,症状应该明显减轻。只有肺热伤...
    湛寂天阅读 988评论 0 1
  • 如果你哪一天感到累了、倦了,实在不想上班,就到凌晨的大街上走走看看。 你会明白,这个世界不会因为黑夜的降临,懈怠和...
    翱翔的天空阅读 968评论 0 0
  • 我叫阿黄,是一位编号为2333资深大龄单车。我出生都快接近八百天了,但我依旧服务着大家。在这漫长而又孤单的单车岁月...
    周同学dashing阅读 4,726评论 6 51
  • 走在寂静而又略带苍凉的校园小道上,心中是莫名的空虚。突然一声熟悉又陌生的声音传来,打破了这唯一的宁静,一种似曾相识...
    火柴盒环游记阅读 2,548评论 0 1