2009-06-12 43 views
5

我想結合一些行動,以一個拍照鍵:安卓:註銷相機按鈕

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; 
    } 
}); 

然而按下按鈕的應用程序崩潰,因爲原來的攝像頭應用程序啓動。

有誰知道如何防止相機按鈕被按下時相機應用程序啓動?

回答

6

在你的例子中,你需要返回true讓它知道你「消費」了事件。就像這樣:

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; 
    } 
}); 

還將只有當videoPreview(或子元素)的重點工作。所以,你可以將它設置爲默認具有焦點:

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

或(者優先)把聽者的頂級元素(如LinearLayoutRelativeLayout,等)。

2

你忘了返回true你的情況KeyEvent.KEYCODE_CAMERA分支。如果您返回true,則向Android發出消息說明已經消耗了關鍵事件,並且不應啓動Camera應用程序。通過始終返回false,所有關鍵事件都向上傳遞給默認處理程序。

3

一個簡單的方法來禁用相機按鈕(或點擊反應)是以下內容添加到您的活動:

@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

只要相機按下按鈕廣播消息被髮送到所有的應用程序都在收聽它。您需要使用廣播接收器和abortBroadcast()函數。 您可以在下面的鏈接

http://suhassiddarth.blogspot.com/

有關更多細節