/**
* 媒体音量监听类
*/
public class VolumeChangeObserver {
private static final String ACTION_VOLUME_CHANGED = "android.media.VOLUME_CHANGED_ACTION";
private static final String EXTRA_VOLUME_STREAM_TYPE = "android.media.EXTRA_VOLUME_STREAM_TYPE";
private Context mContext;
private OnVolumeChangeListener mOnVolumeChangeListener;
private VolumeReceiver mVolumeReceiver;
private AudioManager mAudioManager;
public VolumeChangeObserver(Context context) {
mContext = context;
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}
public int getCurrentVolume() {
return mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
}
public void registerVolumeReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_VOLUME_CHANGED);
mVolumeReceiver = new VolumeReceiver(this);
mContext.registerReceiver(mVolumeReceiver, intentFilter);
}
public void unregisterVolumeReceiver() {
if (mVolumeReceiver != null) mContext.unregisterReceiver(mVolumeReceiver);
mOnVolumeChangeListener = null;
}
public void setOnVolumeChangeListener(OnVolumeChangeListener listener) {
this.mOnVolumeChangeListener = listener;
}
public interface OnVolumeChangeListener {
void onVolumeChange(int volume);
}
private static class VolumeReceiver extends BroadcastReceiver {
private WeakReference<VolumeChangeObserver> mObserver;
VolumeReceiver(VolumeChangeObserver observer) {
mObserver = new WeakReference<>(observer);
}
@Override
public void onReceive(Context context, Intent intent) {
if (mObserver == null) return;
if (mObserver.get().mOnVolumeChangeListener == null) return;
if (isReceiveVolumeChange(intent)) {
OnVolumeChangeListener listener = mObserver.get().mOnVolumeChangeListener;
listener.onVolumeChange(mObserver.get().getCurrentVolume());
}
}
private boolean isReceiveVolumeChange(Intent intent) {
return intent.getAction() != null
&& intent.getAction().equals(ACTION_VOLUME_CHANGED)
&& intent.getIntExtra(EXTRA_VOLUME_STREAM_TYPE, -1) == AudioManager.STREAM_MUSIC;
}
}
}
Android 监听系统音量
最新推荐文章于 2024-08-04 03:29:29 发布