解决Android TV开机后页面首次加载无焦点问题

因为开机后android默认是在Touch模式,而TV交互需要通过焦点控制,所以我们需要页面一显示,就离开Touch模式。

怎么离开Touch模式呢?

我们知道,当用户开始通过触摸屏与设备交互的时候,设备就进入Touch Mode模式;当用户开始通过键盘与设备交互的时候,设备就退出Touch Mode模式。

也就是说,我们需要IR产生动作,让页面恢复正常,事实也是如此:开机后,页面没有焦点,我们按任意键,焦点马上就出现了。

知道bug产生原因后,我们就需要给出解决方案,上面提到,任意按键,焦点就正常了,但是我们不可能让用户每次开机主界面出来后,按一下遥控键,来修复bug,这种操作对用户来说是不必要的,会影响交互体验,况且这是程序的问题,不能让客户买单。

那怎么办呢?查资料,我们发现,Android可以模拟按键事件,那办法就有了,加载主界面的时候,执行模拟键盘事件。同时,因为一些常用按键都有自己的功能,所以我们选用的按键必须是没有被占用的,这里我选了KeyEvent.KEYCODE_SLASH,这个键值,TV上基本不会用到。

下面贴出代码方案

将模拟按键操作封装成通用工具类的一个静态方法

      public static void simulateKeystroke(final int KeyCode) {
            new Thread(new Runnable() {
                  public void run() {
                        try {
                              Instrumentation inst = new Instrumentation();
                              inst.sendKeyDownUpSync(KeyCode);
                        }
                        catch (Exception e) {
                              e.printStackTrace();
                        }
                  }
            }).start();
      }

在主界面Activity中调用

        mHandler.postDelayed(new Runnable() {
            @Override 
            public void run() {
                CommonUtils.simulateKeystroke(KeyEvent.KEYCODE_SLASH);
            }
        }, 200);

你可能感兴趣的:(Android,TV)