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
, чтобы перехватить весь поток журналов устройств ввода. затем активируйте журнал разыскиваемых ключей.
person
CrazyBoyFeng
schedule
19.11.2015