2012-10-03 23 views
12

Vâng, câu hỏi khá đơn giản - làm cách nào tôi có thể xử lý nhấp chuột trái/phải/giữa, bánh xe và di chuyển (!) Trong android 2/3/4.Xử lý tất cả các sự kiện chuột trong Android

Tôi đã đào về chủ đề này và tìm thấy những điều sau

  • trong api 14 chúng ta có thể xử lý hầu hết mọi thứ với MotionEvent mới lạ mắt
  • chúng tôi cũng có mở phụ kiện mà có vẻ là ok với USB chuột kể từ api 12 (vẫn thiếu bluetooth) (UPD OA backported to 2.3.4)
  • chuột thực sự hoạt động tốt trên máy tính bảng với ICS và Honeycomb và cyanogen 2.3.7, nhưng hoạt động như chỉ liên lạc duy nhất trên mỗi button.I tự hỏi là có một cách để chặn các tin nhắn chuột.

Giúp tôi vui lòng hiểu cách tôi có thể xử lý bluetooth và chuột usb theo cách đơn giản và đúng nhất trong mỗi phiên bản Android. Hay nói điều không thể.

UPD2: có vẻ như Máy chủ USB chỉ ở 3.1+, trong khi Phụ kiện USB vô dụng cho tác vụ này

+0

Đọc http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch-events/1775 và http: // developer.android.com/reference/android/view/MotionEvent.html –

+1

Tôi đã xem các bài viết đó, nhưng chưa tìm thấy gì mới. Bạn đang ám chỉ cái gì? – mjollneer

Trả lời

15

Đây là những phát hiện của tôi:

Đối Api Cấp < 9:

  • nút chuột chính bên ngoài được xử lý giống như một ngón tay chạm bình thường. Dường như không có cách nào để phát hiện chuột.
  • Nút phụ được gửi đi máng KeyEvent với KeyEvent.KEYCODE_BACK. Không có cách nào để phân biệt giữa các lần nhấn "Quay lại" thực tế và các nút nhấn phụ.

Đối Api Cấp 9 +:

  • Một phương pháp mới đã được thêm vào MotionEvent.getSource(). Tôi sử dụng cái này để phát hiện nếu đầu vào là từ chuột.
  • Nút phụ vẫn được gửi qua KeyEvent với KeyEvent.KEYCODE_BACK.Trên một số thiết bị, KeyEvent.getSource() trả lại InputDevice.SOURCE_MOUSE, do đó, tính năng phát hiện nút phụ hoạt động trong một số trường hợp.

Đối Api Cấp 12 +:

  • OnGenericMotionListener đã được thêm vào. Tôi sử dụng tính năng này để phát hiện di chuyển chuột với ACTION_HOVER_MOVE và thay đổi bánh xe với ACTION_SCROLL.

Đối Api Cấp 14 +:

  • Phương pháp mới MotionEvent.getButtonState(). Tôi theo dõi danh sách này để phân biệt xem nút chuột chính, phụ, cấp ba có được nhấn khi MotionEvent.getActionMasked()ACTION_MOVE, ACTION_DOWN hoặc ACTION_UP.

Tôi chưa xem xét cấp Api 15/16 hoặc loại công cụ, vì tôi có thể theo dõi tất cả các sự kiện chuột với những gì tôi đã mô tả ở trên. Sẽ rất thú vị nếu có ai có thêm thông tin hoặc nếu tôi bỏ lỡ 15/16/tooltypes.

+0

Xóa bản trình bày và một số gợi ý mới)) – mjollneer

+0

Trên thiết bị Samsung có API cấp 23 Tôi vẫn chỉ nhận được * KeyEvent * chứ không phải * MotionEvent * và không có cách nào để phát hiện sự kiện MousUp với * OnGenericMotionListener * trên thiết bị Android _vanilla_ làm việc với * OnGenericMotionListener *. – Roel

1

OK. Tôi nghĩ tôi có một đầu mối. Tôi đã đọc highlights about android 3.x/4.x và nhận ra rằng ...

  1. chúng ta có thể sử dụng chuột trong android 3+, trong phiên bản cũ chuột là thiết bị cụ thể

  2. chúng ta có thể chặn các sự kiện chuột được nhận dạng từ bất kỳ nguồn nào (BT hoặc USB) ...

2.1. ... cuộn hoặc hover_move trong 3.1+ trong onGenericMotionEvent

2.2. ... nút chính, phụ, và đại học và di chuột vào/ra trong android 4.0+ (và cuối cùng là TOOL_TYPE_MOUSE liên tục)

Tùy chọn khác là phân tích dữ liệu lowlevel khá từ ổ cắm bluetooth hoặc usb ở chế độ máy chủ.

Tôi có đúng không? Vẫn còn tự hỏi nếu có ai có giải pháp tốt hơn.