2011-03-26 3 views
6

En utilisant le code ci-dessous j'ai arrêté l'utilisation des boutons de volume à moins que je ne diffuse de l'audio (sinon cela change le volume de la sonnerie), mais le bouton 'Back' ne fonctionne pas. En appuyant sur «retour» devrait arriver à mon bureau de téléphones (ou quitter mon application, comme vous vous attendez), mais il ne fait rien. Si j'ouvre le menu, 'Back' fermera le menu comme il se doit, mais je ne peux pas quitter l'application.android - bouton de volume remplacé a affecté le bouton de retour?

J'ai copié le code sur d'autres activités dans mon application, si j'ouvre une autre activité dans mon application, parce que le bouton 'Back' ne fonctionne pas, je ne peux pas retourner à l'écran principal :)

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //Suppress the use of the volume keys unless we are currently listening to the stream 
    if(keyCode==KeyEvent.KEYCODE_VOLUME_UP) { 
     if(StreamService.INT_PLAY_STATE==0){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
    if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN) { 
     if(StreamService.INT_PLAY_STATE==0){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
return false; 

Pourquoi cela se produit-il?

+0

a d'autres boutons affectés – katsharp

+0

Êtes-vous sûr vous voulez empêcher l'utilisateur de changer le volume de sa sonnerie? Le comportement normal sur les appareils Android est de changer le volume de la sonnerie quand aucun son n'est en cours de lecture et de changer le volume des médias quand il est, peu importe l'application dans laquelle vous vous trouvez. Comme vous l'avez, ils doivent fermer votre application pour modifier leur volume de sonnerie. Si j'étais votre utilisateur, j'appellerais cela un ennui plutôt qu'une caractéristique. – LouieGeetoo

+0

Salut Louie, oui je suis d'accord mais son application de streaming audio, la plupart des utilisateurs me disent qu'il est ennuyeux d'ouvrir l'application, en cliquant sur écouter (il y a une seconde ou deux pause pendant que le flux se connecte) au cas où son trop fort et à la place les volumes de la sonnerie descend. – jwbensley

Répondre

5

ai pas testé, mais je pense que vous avez besoin d'inclure un autre où vous appelez super.onKeyDown, à savoir:

if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
    code 
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
    more code 
} else { 
    super.onKeyDown(keyCode, event); 
} 

Sinon, vous capturez tous keycodes et retour faux après vérification des codes de volume .

+0

Merci de remarquer que sur :) Ceci est le code de travail Ma dernière: @Override onKeyDown public boolean (int codeTouche, événement KeyEvent) { if (codeTouche == KeyEvent.KEYCODE_VOLUME_UP) { if (StreamService.INT_PLAY_STATE == 0) { return true; } else { return false; } } else if (code_clé == KeyEvent.KEYCODE_VOLUME_DOWN) { if (StreamService.INT_PLAY_STATE == 0) { return true; } else { return false; } } else { super.onKeyDown (code de clé, événement); } return false; } – jwbensley

+1

Pantalons, qui ne sont pas sortis comme je l'avais exposé :) Pour quelqu'un d'autre avec la même erreur c'est ici: http://pastebin.com/cJ7Uq0TV – jwbensley

3

Mec, il suffit de changer le contexte audio de cette activité au volume des médias:

http://developer.android.com/reference/android/media/AudioManager.html

EDIT:

private AudioManager audio; 

intérieur onCreate:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

Remplacer onKeyDown:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_VOLUME_UP: 
     audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, 
       AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, 
       AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); 
     return true; 
    default: 
     return false; 
    } 
} 
5

Une façon plus simple et plus robuste d'avoir les touches de volume commandent toujours le volume des médias est d'insérer cette ligne dans votre onCreate() de l'activité:

setVolumeControlStream(AudioManager.STREAM_MUSIC); 
+0

Salut, merci pour cela. Les autres avaient répondu à ma question initiale mais j'ai en fait échangé mon code pour cela, c'est une meilleure méthode IMO. Merci :) – jwbensley

0
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     //your code 
     return true; 

    } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
     //your code 
     return true; 
    } else { 

     super.onKeyDown(keyCode, event); 
    } 


    return true; 

}