Android开发之TV端APP在手机上运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25034451/article/details/53488104

最近在开发电视端的APP,接到一个任务,要开发一个手机端的APP,让我先做测试,看手机上的一些服务在手机上是否能够正常运行?好吧,我先测试吧,不知道如何下手,让我写界面?还是算了吧,写了也没有用,就我那点审美观,写出来肯定用不上。于是我就想啊,既然都是Android系统,应该都可以运行吧,不管它,先安装上再说,结果遇到了下面几个问题。

1、第一个问题

安上之后,界面乱的一塌糊涂,我想,不应该啊,程序的屏幕适配已经做了啊,再乱,也不会是这样啊!查来查去,发现原来还真是屏幕适配出了问题。
在手机端,一般而言宽是小于高的,而TV端宽是大于高的。在程序调用onCreate之后,若没有设置过横竖屏,TV端(横屏为默认)和手机端(竖屏为默认)获得的值是不一样的,所有出了问题,好吧,在初始化尺寸管理时,把在手机上得到的宽高调换一下,就ok了

2、第二个问题

在电视端,没有touch事件,只能通过遥控器的Key事件来作处理,而手机没有键盘,怎么办?弄个虚拟键盘,但是这事件该如何产生呢?网上搜了一大堆,好多都是下面这两个方法,好吧,做了一个悬浮窗(在这感谢一下伟大的互联网,是它让我可以快速地写一个悬浮窗),用第一个方法实现了想要的效果,虽然调试了一早上,第二个效果没有实现,可能是我不会用吧!

方法一:
Runtime runtime = Runtime.getRuntime();
runtime.exec("input keyevent " + KeyEvent.KEYCODE_BACK);
方法二:(开启一个线程去执行)
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

3、第三个问题

做完这些,我在想,我能不能做一个悬浮窗,然后所有的TV应用都能够用它产生的事件做出响应,上面的方法只有本应用才起作用,其他应用是无法接收到的,那怎么办?思考手机上的键盘事件是怎么产生的?唉,菜鸟一个,暂时没法看懂Android源码!只能去网上找一些模拟方法,搜了好多,终于发现了一篇文章,原文链接在这儿

import java.io.OutputStream;

/** * 用root权限执行Linux下的Shell指令 * * @author jzj * @since 2014-09-09 */
public class RootShellCmd {
    private OutputStream os;
    /**
     * 执行shell指令 
     * @param cmd 指令
     */
    public final void exec(String cmd) {
        try {
            if (os == null) {
                os = Runtime.getRuntime().exec("su").getOutputStream();
            }
            os.write(cmd.getBytes());
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 后台模拟全局按键 
     * @param keyCode 键值
     */
    public final void simulateKey(int keyCode) {
        exec("input keyevent " + keyCode + "\n");
    }
}

用这个方法就可以实现所有的应用都可以接收到按键事件了,但是有点慢,希望有大神指出更快的方法。

猜你喜欢

转载自blog.csdn.net/qq_25034451/article/details/53488104
今日推荐