Android開發之TV端APP在手機上執行
阿新 • • 發佈:2018-12-09
最近在開發電視端的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");
}
}
用這個方法就可以實現所有的應用都可以接收到按鍵事件了,但是有點慢,希望有大神指出更快的方法。