1. 程式人生 > >Android開發之TV端APP在手機上執行

Android開發之TV端APP在手機上執行

最近在開發電視端的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"); } }

用這個方法就可以實現所有的應用都可以接收到按鍵事件了,但是有點慢,希望有大神指出更快的方法。