5

Tôi đang cố gắng triển khai dịch vụ phương thức nhập nhận được ý định được gửi bởi ứng dụng khách từ xa và phản hồi những người gửi một KeyEvent thích hợp.Làm cách nào để gửi KeyEvents thông qua dịch vụ phương thức nhập vào một Hộp thoại hoặc menu Spinner?

Tôi đang sử dụng trong phương pháp này input method service

private void keyDownUp(int keyEventCode) 
{ 
    getCurrentInputConnection().sendKeyEvent(
       new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode)); 
    getCurrentInputConnection().sendKeyEvent(
       new KeyEvent(KeyEvent.ACTION_UP, keyEventCode)); 
} 

để gửi KeyEvents như trong Simple Sofykeyboard Sample, và nó hoạt động trong gia đình, trong Activities. .. nhưng nó không hoạt động khi một Dialog hoặc menu của Spinner ở phía trước.

Sự kiện được gửi đến parent activity behind the Dialog.

Có cách nào để gửi khóa và điều khiển thiết bị như sử dụng các phím phần cứng từ phương thức nhập liệu không?

Better lời giải thích về những gì tôi đang cố gắng để làm:

Tôi loại writng một Input Method cho phép để điều khiển thiết bị từ xa.

Tôi viết trong ứng dụng khách (một ứng dụng java trên máy tính để bàn của tôi) một lệnh (ví dụ "UP"), máy chủ trên thiết bị với sendBroadcast() gửi ý định với thông tin và người nhận trong phương thức nhập lấy nó và gọi keyDownUp với keycode của DPAD_UP key. Nó thường hoạt động, nhưng khi tôi đi đến một ứng dụng hiển thị hộp thoại, phương pháp keyDownUp không gửi sự kiện quan trọng đến số dialog, ví dụ để chọn có hoặc không nhưng vẫn giữ quyền kiểm soát activty phía sau Dialog.

Here Tôi đã tìm thấy một người nào đó với cùng một vấn đề của tôi ... nhưng không có câu trả lời ...

Trả lời

1

Trước tiên, hãy để tôi giải thích những gì tôi đã hiểu.

  • Bạn đi đến một ứng dụng
  • Bạn mở một Dialog trong hoạt động đó (Ví dụ đi đến ứng dụng sms, báo chí dài a thread)
  • Bạn nhấn phím HOME.
  • Chuyển đến một ứng dụng khác gửi ý định
  • IME có ý định và viết nội dung nào đó.

Tôi không hiểu cách hoạt động với Hộp thoại được mở lại.

AFAIK, khi bạn nhấn một phím trong softKeyboard, IME của onKey(int primaryCode, int[] keyCodes) được gọi và khi bạn nhấn một cứng chủ chốt IME được gọi tại địa chỉ:

  • public boolean onKeyUp(int keyCode, KeyEvent event)
  • public boolean onKeyDown(int keyCode, KeyEvent event)

Bạn có thể thử gọi các phương thức đó thay vào đó, nhưng tôi không biết nếu giả lập một khóa cứng sẽ sửa chữa nó. Tôi đoán đó là vấn đề trọng tâm. Bạn đã thử nhận được văn bản từ getCurrentInputConnection() để xem văn bản đang ở đâu?

+0

Tôi đã chỉnh sửa câu hỏi của mình đang cố gắng làm rõ vấn đề của mình là gì. Trong ví dụ của bạn khi tôi mở hộp thoại trong ứng dụng sms, nếu tôi gửi lệnh DOWN cho khóa DPAD_DOWN, nó sẽ không làm cho hộp thoại ở phía trước cuộn, nhưng nó được gửi đến hoạt động phía sau, hộp thoại hiển thị danh sách tin nhắn, chọn tin nhắn bên dưới cái tôi đã nhấn lâu, không thể đóng hộp thoại. Tôi đã cố gắng gọi onKeyDown và onKeyUp, nhưng chúng không hoạt động ở nơi keyDownUp hoạt động. – shutdown11

+0

getCurrentInputConnection() luôn trả về kết nối với hoạt động hiển thị hộp thoại và không bao giờ là hộp thoại. Sử dụng phím cứng thay vào đó, bạn có thể cuộn hộp thoại khi nó được lấy nét, vì vậy tôi đã tự hỏi về cách mô phỏng một khóa cứng. – shutdown11

+0

Phím cứng chắc chắn có thể được mô phỏng với lớp Instrumentation, nhưng yêu cầu thiết bị gốc. –

Các vấn đề liên quan