2009-06-12 37 views
5

tôi đã cố gắng để ràng buộc một số hành động với một nút camera:Android: Unregister nút camera

videoPreview.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(event.getAction() == KeyEvent.ACTION_DOWN) { 
      switch(keyCode) { 
       case KeyEvent.KEYCODE_CAMERA: 
        //videoPreview.onCapture(settings); 
        onCaptureButton(); 
... 
      } 
     } 
     return false; 
    } 
}); 

Nhấn nút tuy nhiên ứng dụng bị treo vì bản gốc ứng dụng Camera khởi động.

Có ai biết cách ngăn ứng dụng Camera bắt đầu khi nhấn nút camera không?

Trả lời

6

Trong ví dụ của bạn, bạn cần phải trả lại true để thông báo cho bạn biết rằng bạn đã "tiêu thụ" sự kiện. Như thế này:

videoPreview.setOnKeyListener(new OnKeyListener(){ 
    public boolean onKey(View v, int keyCode, KeyEvent event){ 
     if(event.getAction() == KeyEvent.ACTION_DOWN) { 
      switch(keyCode) { 
       case KeyEvent.KEYCODE_CAMERA: 
        //videoPreview.onCapture(settings); 
        onCaptureButton(); 
        /* ... */ 
        return true; 
      } 
     } 
     return false; 
    } 
}); 

Nó cũng sẽ chỉ hoạt động nếu videoPreview (hoặc phần tử con) tập trung. Vì vậy, bạn có thể hoặc thiết lập nó có tập trung theo mặc định:

@Override 
public void onResume() { 
    /* ... */ 
    videoPreview.requestFocus(); 
    super.onResume(); 
} 

hoặc (ưa thích) đưa người nghe vào các yếu tố cấp cao nhất (ví dụ như một LinearLayout, RelativeLayout, vv.).

2

Bạn quên trả lại true trong trường hợp của bạn là chi nhánh KeyEvent.KEYCODE_CAMERA. Nếu bạn trả về true, tín hiệu đó cho Android rằng bạn đã tiêu thụ sự kiện quan trọng và ứng dụng Máy ảnh sẽ không được khởi chạy. Bằng cách trả về false tất cả thời gian, tất cả các sự kiện quan trọng được truyền lên tới các trình xử lý mặc định.

3

một cách đơn giản để vô hiệu hóa các nút camera (hoặc phản ứng trên một nhấp chuột) là để thêm dòng sau vào hoạt động của bạn:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_CAMERA) { 
     return true; // do nothing on camera button 
    } 
    return super.onKeyDown(keyCode, event); 
} 
4

Ngay sau khi nút camera được nhấn nhắn phát sóng sẽ được gửi đến tất cả các ứng dụng đều nghe nó. Bạn cần sử dụng chức năng Broadcast receivers và abortBroadcast(). Bạn có thể tìm thêm chi tiết về vấn đề này trong link bên dưới

http://suhassiddarth.blogspot.com/