关闭屏幕的AccessibilityService OnKeyEvent

时间:2014-12-24 02:59:43

标签: android accessibilityservice

我正在使用AccessibilityService OnKeyEvent来捕获Headsethook。这样我就可以在键盘上触发事件,并按下键,即使我的应用程序没有成为焦点。

然而,一旦屏幕熄灭,它就不起作用。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

屏幕关闭时,

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听取焦点变化并重新注册。

如果您还想在后台捕获其他密钥。据我所知,root是一个正确的解决方案。您可以使用AudioFocusChangeListener命令捕获输入设备的所有日志流。然后触发所需密钥的日志。