2017-04-07 320 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。 –