2017-04-07 125 views
-1

我正在開發一個通話應用程序。所以我需要從藍牙設備中選擇/掛斷電話。但我無法從藍牙耳機獲得按鍵事件。 我曾嘗試廣播和音頻管理器,但只獲得播放/暫停,前和下一個按鈕回調。檢測藍牙耳機通話按鈕按下android

public class MediaButtonIntentReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { 
      KeyEvent event = (KeyEvent) intent .getParcelableExtra(Intent.EXTRA_KEY_EVENT); 

      if (event == null) { 
       return; 
      } 

      if (event.getAction() == KeyEvent.ACTION_DOWN) { 
       //context.sendBroadcast(new Intent(Intents.ACTION_PLAYER_PAUSE)); 
      } 
     } 
    } 
} 

menifest是

<receiver android:name=".net.MediaButtonIntentReceiver"> 
<intent-filter> 
<action android:name="android.intent.action.MEDIA_BUTTON" /> 
</intent-filter> 
</receiver> 

我只需要得到該事件時,我的活動是活的,所以我必須使用onKeyDown和活動的dispatchKeyEvent方法太多,但似乎沒有任何工作。它給了我相同的結果和以前。 必須有一個辦法,導致系統手機應用程序獲取啓動撥號程序的此事件。請建議我一些有用的方法來做到這一點。

回答

0

我認爲你需要聽KeyEvent.KEYCODE_CALLKeyEvent.KEYCODE_ENDCALL

的KeyEvents的完整列表可以在這裏找到:https://developer.android.com/reference/android/view/KeyEvent.html

請記住,呼叫處理大多數耳機(有線或不能)使用播放/暫停按鈕也可以結束通話。

編輯:

試試這個在您的dispatchKeyEvent:

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 
    if (event.getKeyCode() == KeyEvent.KEYCODE_CALL) { 
     Toast.makeText(this, "CALLING!", Toast.LENGTH_LONG).show(); 
     return true; 
    } 
    return super.dispatchKeyEvent(event); 
} 

記住與靜態KEYCODE_ {} SOMEKEY整數打交道時,你應該使用event.getKeyCode();而不是event.getAction();

+0

Thx的回覆看起來像是閱讀文檔後正確的方式。但是我沒有在dispatchKeyEvent中獲取這個事件回調。您能否告訴我如何捕獲這兩個事件 – ADM

+0

無法在dispatchKeyEvent中獲取事件。你有沒有試過這段代碼?因爲我檢查它不工作 – ADM

+0

@ADM是的,我在使用android 7.1的Android模擬器上的一個新項目中嘗試了這一點。我使用'adb shell input keyevent 5'來模擬呼叫按鈕。在這種情況下,5是呼叫按鈕的KeyCode。 –

相關問題