der*_*itz 17 android bluetooth android-bluetooth
我的应用程序可以通过普通耳机控制.它只是覆盖"onKeyDown".但是没有捕获蓝牙耳机的关键事件 - 为什么?或者如何捕获蓝牙键事件?
如果我按下耳机上的按钮,"log cat"会显示以下内容:
Bluetooth AT recv(3043): AT+VGS=15
AudioPolicyManagerBase(13654): FM radio recording off
AudioService(2261): sendVolumeUpdate, isKeyguardLocked...Not to update Volume Panel.
VolumePanel(2261): change volume by MSG_VOLUME_CHANGED
VolumePanel(2261): onVolumeChanged(streamType: 6, flags: 0)
VolumePanel(2261): Call setChangeSeekbarColor(false)
Run Code Online (Sandbox Code Playgroud)
我也尝试处理媒体按钮操作,但这不起作用.我的想法是一个免费的可配置键映射:用户选择"设置键"我的应用程序听到所有键(硬件,媒体按钮,蓝牙耳机),然后用户按下一个键,事件/密钥代码存储在配置中.
总结不工作的答案: 音量按钮必须由"VOLUME_CHANGED_ACTION"捕获.问题是这个意图被广播到其他应用程序并且abortBroadcast()不起作用(它仅适用于"有序"广播).另一个问题是有线耳机和手机上的按键触发onReceive()两次(为什么?)蓝牙耳机会触发一次.下一个问题是蓝牙耳机上的第3个键.它触发语音命令(s-s在s3上启动),我试图捕获许多不同的意图,但我不能"接收"这个按钮按下而不知道为什么.最后,我希望捕获各种按钮,并且不希望它们由其他应用程序处理(例如使用onKeyDown并返回true).
Yas*_*nan 29
添加广播监听器MEDIA_BUTTON:
<intent-filter android:priority="<some number>">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
您应该在应用程序内注册广播接收器(而不是在清单文件中).否则,Google音乐播放器会抓住您的广播并加入其中.
您的IntentFilter优先级应该高于手机中其他媒体播放器的优先级)
android.permission.BLUETOOTH在清单中添加权限以支持蓝牙耳机
收到你的密钥后,你必须手动中止广播abortBroadcast().
但是优先级和abortBroadcast()工作正常,只要每个应用程序仅响应,例如播放某些内容.但是一些用户还希望按下按钮时启动(或开始播放)"默认播放器",就像默认播放器一样,因此可能会发生一些具有更高优先级的应用不会让意图通过您的应用
在onReceive,你可以得到按钮事件
KeyEvent key = (KeyEvent)
intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
Run Code Online (Sandbox Code Playgroud)
key.getKeyAction()告诉您按钮是否被释放或按下,告诉您按下了key.getKeyCode()哪个按钮.
如果您还想处理单键电缆耳机,也要考虑键码 KEYCODE_HEADSETHOOK
覆盖onKeyDown任何活动中的方法并检查KeyEvent.KEYCODE_MEDIA_KEYCODE_pressed_key
例如
boolean onKeyDown(int keyCode, KeyEvent event) {
AudibleReadyPlayer abc;
switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
// code for fast forward
return true;
case KeyEvent.KEYCODE_MEDIA_NEXT:
// code for next
return true;
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
// code for play/pause
return true;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
// code for previous
return true;
case KeyEvent.KEYCODE_MEDIA_REWIND:
// code for rewind
return true;
case KeyEvent.KEYCODE_MEDIA_STOP:
// code for stop
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
卷密钥集成示例
Android - 我的应用程序中使用的卷按钮
这可能需要权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
Run Code Online (Sandbox Code Playgroud)
或者您可以尝试通过以下链接进行更简洁的实施
Android Developer Blog:处理远程控制按钮
Android故事:为您的Android应用添加耳机按钮支持
| 归档时间: |
|
| 查看次数: |
26135 次 |
| 最近记录: |