2012-01-02 17 views
16

Làm thế nào tôi có thể lập trình mô phỏng một phím bấm trên một Droid? Tôi muốn bắt chước một phím bấm thủ công (xuất hiện trên droid mà ai đó đang nhấn một phím nhưng nó đang được thực hiện theo chương trình).Android mô phỏng bấm phím

Có các giải pháp có liên quan đến IWindowManager, nhưng đó không còn là một tùy chọn nữa trong SDK mới.

+0

Các thiết bị đo đạc kiểm tra, điều chỉnh các ứng dụng để đáp ứng với một cái gì đó khác hơn chạm thực tế và "root" thiết bị để tiêm các sự kiện ở cấp độ linux là 3 lựa chọn của bạn. –

Trả lời

32

Bạn có thể sử dụng thiết bị đo đạc, tức là sau mã được gọi là từ onCreate hoạt động của bạn sẽ gây ra menu để được mở ra và đóng lại nhiều lần:

new Thread(new Runnable() {   
     @Override 
     public void run() { 
      try { 
      Instrumentation inst = new Instrumentation(); 
      for (int i = 0; i < 10; ++i) { 
       inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); 
       Thread.sleep(2000); 
       inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); 
       Thread.sleep(2000); 
      } 
      } 
      catch(InterruptedException e){ 
      } 
     } 
    }).start(); 

... nhưng tôi không chắc chắn nếu điều này là những gì bạn đang sau

+4

đây chính xác là những gì tôi đang tìm kiếm nhưng ... không phải là thiết bị đo lường nghiêm ngặt để thử nghiệm? Tôi đang tìm một giải pháp mà tôi có thể sử dụng trong một ứng dụng trực tiếp, chứ không phải thử nghiệm. cảm ơn trước. – calcrisk33

+0

@ calcrisk33 Tôi chưa thể tìm thấy bất kỳ thông tin nào về việc đây có phải là giải pháp khả thi cho ứng dụng trực tiếp hay không. Bạn đã kết thúc bằng cách sử dụng nó theo cách đó? – Kirk

+1

@Kirk Tôi đã làm và nó hoạt động rất tốt để mô phỏng một cú đánh/bấm phím. – calcrisk33

0

Nếu bạn có chế độ xem muốn sử dụng sự kiện, bạn có thể sử dụng lớp BaseInputConnection và phương thức sendKeyEvent của nó.

Để sử dụng, bạn cần chỉ định chế độ xem mục tiêu (ví dụ: EditText) sẽ nhận KeyEvent. Ví dụ:

EditText editText; 
BaseInputConnection inputConnection = new BaseInputConnection(editText, true); 
inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POUND)); 

Kết quả của việc này giống như người dùng thực sự nhấn # phím (trong khi có văn bản chỉnh sửa được tập trung).

0

Bạn cũng có thể sử dụng input text, ví dụ:

Từ máy tính thông qua adb:

adb shell input text 'example\\@email.com' 

Từ shell:

input text 'example\\@email.com'