Android類比按鍵

來源:互聯網
上載者:User

在android 系統中,可能有的朋友需要這樣的功能.
按下Activity中的一個button,它的反映就象按下了硬體的home鍵. 應該來說這樣的功能是可以實現的.為什麼這樣說呢?
按了硬體,驅動程式會產生訊息放到系統的訊息佇列裡,我突然想到了MFC的訊息佇列.呵呵,什麼是訊息佇列呢?你見過訊息佇列嗎? 呵呵,訊息佇列只是一中資料結構,雙向連表完全可以是訊息佇列啊.呵呵。跑題了.
既然驅動能把訊息放到訊息佇列,那AP是否可以主動產生一個訊息,放到訊息佇列呢?原理來說是可以的.
那如何產生訊息呢?又如何傳到系統的訊息佇列呢? 如果解決了這兩個問題,就可以了.作業系統不管你訊息是硬體產生的,還是軟體類比產生的,有訊息來了,我就讀,然後做處理就好了.
恩,那開始解決這兩個問題.
首先我們得明白我是要類比一個按鍵訊息,那自然想到是個keyEvent事件了.
那又如何放到訊息佇列中呢?那得看framework ,行好,我替你看了.
口說無憑,看例子.

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.os.DeadObjectException;
  4. import android.os.ServiceManager;
  5. import android.view.IWindowManager;
  6. import android.view.KeyEvent;
  7. import android.view.Menu;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;

  10. public class SimualteKeyInput extends Activity {

  11. final IWindowManager windowManager = IWindowManager.Stub
  12. .asInterface(ServiceManager.getService("window"));
  13. public void onCreate(Bundle icicle) {
  14. super.onCreate(icicle);
  15. setContentView(R.layout.main);
  16. this.findViewById(R.id.cmd_simulate_key).setOnClickListener(
  17. new OnClickListener() {
  18. public void onqisda changerClick(View arg0) {
  19. new Thread(new Runnable() {
  20. public void run() {
  21. simulateKeystroke(KeyEvent.KEYCODE_HOME);
  22. }
  23. }).start();
  24. }
  25. });
  26. }
  27. private void simulateKeystroke(int KeyCode) {
  28. InjectKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyCode));
  29. InjectKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyCode));
  30. }
  31. private void InjectKeyEvent(KeyEvent kEvent) {
  32. try {
  33. windowManager.injectchangerchangerKeyEvent(kEvent,true);
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }

哎,這就很高興了,終於出來了.但是有點問題.什麼問題呢?
該代碼不能在android sdk 1.6上運行,無法編譯,import android.view.IWindowManager;關鍵是這句不行.這沒辦法,這需要在有framework的地方就可以了.
如果你有興趣你可以仔細看看。 具體的如何把訊息放到訊息佇列了,是通過Binder串連到WindowManagerService裡,通過IWindowMangaer.aidl傳遞了訊息.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.