J'essaie de remplacer les boutons de volume pour agir en tant que touches fléchées haut/bas (c'est-à-dire qu'elles doivent se déplacer sur toutes mes activités.)comment usurper les touches fléchées de mon activité sur android
Pour ce faire, je remplace mes activités dispatchKeyEvent()
méthode note que j'ai également essayé onKeyDown()
mais une partie de mes événements de touches de volume était encore en cours au système, mon appareil a un retour sonore lorsque vous modifiez le volume. Je pouvais encore entendre le bip mais le volume n'était pas réellement changé. Le passage au dispatchKeyEvent()
a supprimé le bip provenant du système.
Voici ma méthode actuelle dispatchKeyEvent()
:
@Override
public boolean dispatchKeyEvent(KeyEvent ke){
int keyCode = ke.getKeyCode();
if(ke.getAction() == KeyEvent.ACTION_DOWN){
print("press " + keyCode);
if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
mTxt.postDelayed(pressDown, 600);
return true;
}else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP)
{
KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP);
dispatchKeyEvent(key);
return true;
}
}else if(ke.getAction() == KeyEvent.ACTION_UP){
print("release " + keyCode);
if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
/*KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN);
dispatchKeyEvent(keyUp);*/
return true;
}else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP)
{
KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_UP);
dispatchKeyEvent(keyUp);
return true;
}
}
return super.dispatchKeyEvent(ke);
}
la façon dont il est mis en place maintenant, il utilise différentes techniques pour haut et en bas, mais ne fonctionnent correctement pour changer le focus. Pour la touche Haut, je fais simplement un appel manuel à dispatchKeyEvent() en lui passant la clé d-pad up et la même action que le bouton de volume (donc quand j'appuie dessus, il faut appuyer sur, et quand je relâche je relâche) ma sortie bouton vers le haut ressemble à ceci:
press 24
press 19
release 24
release 19
pour le bouton vers le bas je pincé légèrement parce que je pensais peut-être le fait que la presse dpad se passait avant la sortie du volume rompait, donc je fait une runnable qui sera à la fois appuyer et relâcher le bouton dpad
pressDown = new Runnable(){
@Override
public void run(){
KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN);
dispatchKeyEvent(key);
KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN);
dispatchKeyEvent(keyUp);
}
};
et je retarder que par une partie d'une seconde pour que j'ai une chance de libérer le volum e. Ma sortie du bouton de ressemble à ceci:
press 25
release 25
press 20
release 20
si je branche un clavier USB sur mon appareil et appuyez sur les touches fléchées le focus se déplace correctement et je vois la sortie jusqu'à:
press 19
release 19
et vers le bas:
press 20
release 20
la seule différence (pour autant que je peux dire) est que le focus se déplace effectivement correctement lorsque j'appuie sur les flèches de mon clavier, et ne bouge pas du tout quand je presse la vo boutons de lume (qui usurpent les boutons fléchés)
Est-ce que je regarde quelque chose ici? Quelqu'un peut-il m'aider à comprendre comment usurper les touches fléchées de mon activité afin qu'elles puissent réellement se déplacer correctement?