2009-11-03 34 views
5

Tôi mới sử dụng BlackBerry App. Tôi muốn có thể nghe các sự kiện nhấn phím bất cứ khi nào BlackBerry (8900 trong trường hợp của tôi) đang bật và trên tất cả các màn hình là điều này có thể?BlackBerry - Trình ghi phím có phạm vi toàn cầu

Nếu có, sẽ rất tuyệt vời nếu ai đó hướng dẫn tôi đi đúng hướng. Tôi đã có giao diện KeyListList.

import net.rim.device.api.system.*; 

Cảm ơn tất cả

Trả lời

6

Thực hiện một keylistenerClass thích:

mô hình nhập.Hồ sơ;

import net.rim.device.api.system.KeyListener; 
import net.rim.device.api.ui.Keypad; 


public final class ShortcutHandler implements KeyListener { 

    public boolean keyChar(char key, int status, int time) { 
     return false; 
    } 

    public boolean keyDown(int keycode, int time) { 
     if (Keypad.KEY_ESCAPE == Keypad.key(keycode)) { 
         // Consume the event. 
         // Here I'm consuming the event for the escape key 
      return true; 
     } 
       //let the system to pass the event to another listener. 
     return false; 
    } 

    public boolean keyRepeat(int keycode, int time) { 
     return false; 
    } 

    public boolean keyStatus(int keycode, int time) { 
     return false; 
    } 

    public boolean keyUp(int keycode, int time) { 
     return false; 
    } 

} 

Sau đó, trong constructor ứng dụng của bạn

Tôi xác nhận rằng nó làm việc khi ứng dụng là ở chế độ nền.

+0

Wow - cảm ơn bạn đã xác nhận điều đó, tôi sẽ dùng thử. – Abs

1

này làm thế nào tôi tưởng tượng nó có thể làm việc

  • tạo ra ứng dụng kéo dài UiApplication hoặc thậm chí Application
  • tạo một thực hiện Keylistener (mà cũng có thể mở rộng Thread nếu bạn muốn)
  • thêm KeyListener implementa của bạn chuyển đến ứng dụng của bạn qua số addKeyListener()
  • Sau đó thực hiện bất cứ điều gì bạn muốn.
+0

KeyListener của bạn sẽ chỉ nhận được các sự kiện quan trọng khi ứng dụng của bạn ở nền trước. – Richard

+0

không đúng nhưng cảm ơn cho downvote – jitter

3

Như tôi đã hiểu, bạn muốn nghe tất cả các sự kiện quan trọng trong tất cả các ứng dụng chạy trên thiết bị, không chỉ trong ứng dụng của bạn.
Tôi nghĩ điều đó là không thể.

CẬP NHẬT

như thế nào âm lượng lên và xuống công việc quan trọng? - Abs 11 giờ trước

Nếu bạn muốn nói rằng tất cả các ứng dụng đều nhận được sự kiện quan trọng từ phím âm lượng, điều đó không đúng. RIM OS sẽ nhận được những sự kiện và sau đó cập nhật tất cả các thành phần âm thanh như cảnh báo, âm thanh, máy nghe nhạc, vv

bạn có thể kiểm tra xem nó easely với mẫu này:
alt text

Do sau:

  • chạy mẫu
  • nhập một số sự kiện chính
  • xem số sự kiện
  • go backgro und
  • nhập một số sự kiện quan trọng
  • quay trở lại mẫu bằng cách menu-> ứng dụng chuyển đổi
  • sự kiện kiểm tra số lượng, nó vẫn như nhau

Code:

import net.rim.device.api.system.KeyListener; 
import net.rim.device.api.ui.MenuItem; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.Menu; 
import net.rim.device.api.ui.container.MainScreen; 

public class KeyListenerApp extends UiApplication implements KeyListener { 

    Scr mScreen; 

    public KeyListenerApp() { 
     mScreen = new Scr(); 
     pushScreen(mScreen); 
     addKeyListener(this); 
    } 

    public static void main(String[] args) { 
     KeyListenerApp app = new KeyListenerApp(); 
     app.enterEventDispatcher(); 
    } 

    private void updateScreen(final String text) { 
     mScreen.addLine(text); 
    } 

    public boolean keyChar(char key, int status, int time) { 
     updateScreen("keyChar " + key); 
     return true; 
    } 

    public boolean keyDown(int keycode, int time) { 
     updateScreen("keyDown " + keycode); 
     return true; 
    } 

    public boolean keyRepeat(int keycode, int time) { 
     updateScreen("keyRepeat " + keycode); 
     return true; 
    } 

    public boolean keyStatus(int keycode, int time) { 
     updateScreen("keyStatus " + keycode); 
     return true; 
    } 

    public boolean keyUp(int keycode, int time) { 
     updateScreen("keyUp " + keycode); 
     return true; 
    } 
} 

class Scr extends MainScreen { 
    int mEventsCount = 0; 
    LabelField mEventsStatistic = new LabelField("events count: " 
      + String.valueOf(mEventsCount)); 

    public Scr() { 
     super(VERTICAL_SCROLL | VERTICAL_SCROLLBAR); 
     add(mEventsStatistic); 
    } 

    public void addLine(final String text) { 
     getApplication().invokeLater(new Runnable() { 
      public void run() { 
       mEventsStatistic.setText("events count: " 
         + String.valueOf(++mEventsCount)); 
       insert(new LabelField(text), 1); 
      } 
     }); 
    } 

    protected void makeMenu(Menu menu, int instance) { 
     super.makeMenu(menu, instance); 
     menu.add(goBGMenuItem); 
    } 

    MenuItem goBGMenuItem = new MenuItem("go backgroun", 0, 0) { 
     public void run() { 
      getApplication().requestBackground(); 
     } 
    }; 
} 
+0

Phím tăng và giảm âm lượng hoạt động như thế nào? – Abs

+1

Cảm ơn bạn đã giải thích và mã - nó giúp tôi hiểu tất cả điều này. – Abs

+0

Bạn được chào đón! –

1

Mã được đưa ra ở trên chắc chắn hoạt động, nhưng có sự bắt giữ. Bạn sẽ không thể bẫy các phím bấm trên các ứng dụng gốc như xử lý cuộc gọi sms đến trình duyệt và các công cụ. Khi hệ thống tạo sự kiện toàn cầu cho các ứng dụng này. Nó giống như bạn có thể xác định một thói quen cho các nhấp chuột khi ứng dụng của bạn ở chế độ nền, nhưng chức năng của thường trình đó chỉ được bản địa hóa cho ứng dụng của bạn. Nó sẽ không ảnh hưởng đến các ứng dụng khác như vậy.

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