1

我試圖做一個應用程序,當在配對的藍牙設備上按下按鈕時,在應用程序中觸發點擊監聽器。谷歌搜索幾個小時後,我想我無法發送藍牙設備按鈕的鍵碼到廣播接收器,如果鍵碼匹配,然後我可以打電話給點擊監聽器,或者我的方法和理解是錯誤的,所以任何人都可以請指導我或者指向我正確的方法?在此先感謝藍牙設備按鈕按應觸發應用程序中的Onclick監聽器

藍牙設備:藍牙自拍遠程AB式快門3

我想是這樣的 http://www.barbatricks.com/en/android-en/remap-ab-shutter-3-selfie-remote/

我曾嘗試參考以下鏈接但沒有成功

How to capture key events from bluetooth headset with android

BroadcastReceiver for ACTION_MEDIA_BUTTON not working

How to detect bluetooth call/media button press in android app

http://blog.phonedeveloper.com/2015/04/how-to-receive-bluetooth-broadcast.html

回答

0

好,Android - Volume Buttons used in my application &馬庫斯Kauppinen的解釋,解決我的問題。當點擊一個AB快門3自拍遠程時,MainActivity中的以下代碼可以幫助您在應用內觸發某個功能。在我的應用程序檢測遙控器的按鍵由於Android按鈕ENTER鍵碼66 &的iOS按鈕VOLUME_UP鍵碼24

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    takeKeyEvents(true); 
    } 

@Override 
    public boolean dispatchKeyEvent(KeyEvent event) { 
     int action = event.getAction(); 
     int keyCode = event.getKeyCode(); 
     switch (keyCode) { 

      case KeyEvent.KEYCODE_VOLUME_UP: 
       if (action == KeyEvent.ACTION_DOWN) { 
        Log.i("VOL_UP_pressed", String.valueOf(event.getKeyCode())); 
        Toast.makeText(getApplication(), "IOS button clicked", Toast.LENGTH_SHORT).show(); 
       }         
       return true; 

      case KeyEvent.KEYCODE_ENTER: 
       if(action==KeyEvent.ACTION_DOWN){ 
        Log.i("ENTER_pressed", String.valueOf(event.getKeyCode())); 
        Toast.makeText(getApplication(), "ANDROID button clicked", Toast.LENGTH_SHORT).show(); 
       } 
      default: 
       return super.dispatchKeyEvent(event); 
     } 
    } 

但請注意:它只會在您的應用檢測KeyEvents,而不是在應用程序沒有運行。我的下一步是找到如何啓動該應用程序,並在該應用程序中的clicklistener當配對的AB快門3自拍遙控器上按下按鈕任何人有建議,指導或任何形式的幫助?在此先感謝

+0

你好,你找到了這個任務的解決方案? –

+0

@KadzhaevMarat對不起,我找不到任何解決方案 – Sid

1

我已創建了BT許多應用程序。這裏是我對你的建議簡單:link

2-定義自己:

1與BluetoothChat樣品開始ID在ids.xml即:

<resources> 
    <id name="keyboard" /> 
</resources> 

3-保持所有常見按鈕實例在地圖上在該ID

4-創建橋作爲設備之間的通信信道,從而可以在 雙向發送數據

5-使用橋廣播從/到設備的事件

6-當接收事件數據,只需通過ID獲得該按鈕並致電:

mView.performClick(); 

就是這樣。

+0

謝謝你的時間真的很感激它.. @ Maher Abuthraa – Sid

2

自拍遙控器在Android中顯示爲藍牙鍵盤,對不對?或者作爲一般的HID(人機界面設備)。

如果是這種情況,請添加到活動的onCreate();

takeKeyEvents(true); 

這說明in the documentation

請求關鍵事件來這個活動。如果您的 活動沒有焦點的視圖,但該活動仍然需要處理關鍵事件的機會,請使用此選項。

覆蓋的onKeyUp()(您的活動),並指定您希望使用一些動作的鍵:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 

    switch (keyCode) { 

     case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: 
      Log.d(this.getClass().getName(), "KEYCODE_MEDIA_PLAY_PAUSE"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_MEDIA_PREVIOUS: 
      Log.d(this.getClass().getName(), "KEYCODE_MEDIA_PREVIOUS"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_MEDIA_NEXT: 
      Log.d(this.getClass().getName(), "KEYCODE_MEDIA_NEXT"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_VOLUME_DOWN: 
      Log.d(this.getClass().getName(), "KEYCODE_VOLUME_DOWN"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_VOLUME_UP: 
      Log.d(this.getClass().getName(), "KEYCODE_VOLUME_UP"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_ENTER: 
      Log.d(this.getClass().getName(), "KEYCODE_ENTER"); 
      // Do something... 

      return true; 
     default: 
      return super.onKeyUp(keyCode, event); 
    } 
} 

onKeyUp()方法is explained

時調用關鍵是發佈並且不在活動內部的任何視圖 處理。因此,例如,按鍵當光標 裏面一個TextView不會觸發事件(除非它是一個 導航到另一個對象),因爲TextView的處理自己的關鍵 印刷機。

的默認實現處理KEYCODE_BACK停止活動 並返回。

讓系統處理任何您不想捕獲的密鑰。這由default塊完成。

只需檢查來自遙控器的鍵碼,並刪除不必要的情況。這些只是遙控器可能發送的鍵碼的一些候選項。

,當然任何適用於處理一般的鍵盤將適用於遠程爲好。 (假設它是一個HID,但它們通常是這樣。有按鈕的藍牙耳機是一個完全不同的故事呢。)

這將允許你使用遙控器在自己的應用程序。我不明白爲什麼應該涉及BroadcastReceivers或onClickListeners,但也許我錯過了這一點。

如果你想在後臺運行,併發送重要事件到其他應用程序的東西/重新映射遙控器上的按鍵與其它按鍵代碼觸發系統服務,那麼這也是一個不同的故事。

+0

非常感謝您的時間 – Sid

+0

事實上,你讓我理解這個概念,幫助我弄清楚編碼部分。 – Sid