C'est une méthode héritée qui existe depuis longtemps, mais je vais l'écrire car les informations fournies par Google sont un peu impraticables.
Il y a AudioManager.VOLUME_CHANGED_ACTION (android.media.VOLUME_CHANGED_ACTION) comme intention qui détecte lorsque le volume est modifié ou que le bouton de volume est enfoncé. Tout ce que vous avez à faire est de le recevoir avec le récepteur de diffusion.
Jusqu'à présent, les informations qui sortent immédiatement après google, mais AudioManager.VOLUME_CHANGED_ACTION doit être conscient des points suivants.
--Plusieurs événements sont notifiés par une opération de changement de volume --AudioManager.STREAM_MUSIC, etc. Notifié pour chaque STREAM, et même si le volume ne change pas --L'interface utilisateur du volume est affichée lorsque le premier bouton est actionné alors que l'écran est allumé, et l'événement n'est pas notifié car le volume ne change pas réellement. --Lorsque l'écran est éteint, l'événement ne sera pas notifié même si vous appuyez sur le bouton sauf si vous jouez de la musique avec une application musicale, etc. --Parce que le volume ne change pas
AndroidManifest.xml
<receiver android:name=".VolumeChangedActionReceiver">
<intent-filter>
<actionandroid:name="android.media.VOLUME_CHANGED_ACTION" />
</intent-filter>
</receiver>
VolumeChangedActionReceiver.java
public static class VolumeChangedActionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) {
int newVolume = intent.getIntExtra("android.media.EXTRA_VOLUME_STREAM_VALUE", 0);
int oldVolume = intent.getIntExtra("android.media.EXTRA_PREV_VOLUME_STREAM_VALUE", 0);
int streamType = intent.getIntExtra("android.media.EXTRA_VOLUME_STREAM_TYPE", 0);
if (streamType == AudioManager.STREAM_MUSIC) {
// TODO: write your code
}
}
}
}
Recommended Posts