我正在使用 AccessibilityService OnKeyEvent 来捕获耳机。这样即使我的应用程序不在焦点上,我也可以在上键和下键时触发事件。
但是,一旦屏幕熄灭,它就不起作用。有没有办法解决?
我正在使用 AccessibilityService OnKeyEvent 来捕获耳机。这样即使我的应用程序不在焦点上,我也可以在上键和下键时触发事件。
但是,一旦屏幕熄灭,它就不起作用。有没有办法解决?
AccessibilityService
屏幕关闭时将无法工作。KeyEvent
因此,要实现掉电时的抓力,您应该使用其他替代方案。
如果你只想捕捉HEADSETHOOK
,你可以使用MediaButtonIntentReceiver
而不是AccessibilityService
:注册一个BroadcastReceiver
来接收ACTION_MEDIA_BUTTON
意图,所以可以捕捉KEYCODE_MEDIA_*
和KEYCODE_HEADSETHOOK
在后台,也可以在屏幕关闭时。
AndroidManifest.xml
<receiver android:name="com.exmaple.MediaButtonReceiver"><intent-filter >
<action android:name="android.intent.action.MEDIA_BUTTON"></action>
</intent-filter></receiver>
MediaButtonReceiver.java
...
public void onReceive(Context context, Intent intent) {
...
KeyEvent keyEvent = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
int keyCode = keyEvent.getKeyCode();
switch (keyCode) {
case KeyEvent.KEYCODE_HEADSETHOOK:
...
}
}
...
}
如果您不希望其他应用程序捕获HEADSETHOOK
,您应该使用AudioManager
它来注册它:
...
AudioManager mAudioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
ComponentName mbCN = new ComponentName(getPackageName(),MediaButtonIntentReceiver.class.getName());
mAudioManager.registerMediaButtonEventReceiver(mbCN);
...
//mAudioManager.unregisterMediaButtonEventReceiver(mbCN);
...
注意:大多数音乐播放器应用程序也使用MediaButton
,当他们注册MediaButton
接收器时,您的应用程序将失去焦点AudioManager
,因此您可能应该使用AudioFocusChangeListener
监听焦点更改并重新注册。
如果您还想在后台捕获其他键。据我所知,root 是一个不错的解决方案。您可以使用getevent
命令捕获输入设备的所有日志流。然后触发想要的键的日志。