android – 如何管理MediaPlayer.setVolume()SeekBar来设置它的设备音量控制

android – 如何管理MediaPlayer.setVolume()SeekBar来设置它的设备音量控制,第1张

概述作为 recommended by the doc,我想使用setvolume()方法来控制我的MediaPlayer的音量,但我对如何管理它有点困惑. 我正在使用SeekBar设置音量,初始化为AudioManager.STREAM_MUSIC流中的当前音量. 当用户不修改设备音量控制时这是有道理的,但是当他这样做时,我不确定我应该做什么,我有几个疑问: > MediaPlayer卷如何与设备卷 作为 recommended by the doc,我想使用setvolume()方法来控制我的MediaPlayer的音量,但我对如何管理它有点困惑.

我正在使用Seekbar设置音量,初始化为AudioManager.STREAM_MUSIC流中的当前音量.

当用户不修改设备音量控制时这是有道理的,但是当他这样做时,我不确定我应该做什么,我有几个疑问:

> MediaPlayer卷如何与设备卷相关? setVolume()中设置的最大值(1)是否对应于mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
>如果是这种情况,每次设置设备音量控制时都应重置Seekbar的进度值,但是,使用MediaPlayer.setVolume()而不是AudioManager.setStreamVolume()是什么意思?
>将MediaPlayer.setVolume()与Seekbar一起使用的标准方法是什么?

private final static int MAX_VolUME = 100;private AudioManager mAudioManager; private Seekbar mVolumeControl;mVolumeControl = (Seekbar) getActivity().findVIEwByID(R.ID.volume_control);mAudioManager = (AudioManager) getActivity().getSystemService(Context.AUdio_SERVICE);mVolumeControl.setMax(MAX_VolUME);mVolumeControl.setProgress(MAX_VolUME*mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)/mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); mVolumeControl.setonSeekbarchangelistener(mVolumeControlchangelistener);private Seekbar.OnSeekbarchangelistener mVolumeControlchangelistener = new Seekbar.OnSeekbarchangelistener() {    @OverrIDe    public voID onProgressChanged(Seekbar seekbar,int progress,boolean fromUser) {        float volume = (float) (1 - (Math.log(MAX_VolUME - progress) / Math.log(MAX_VolUME)));        mediaPlayer.setVolume(volume,volume);    }    @OverrIDe    public voID onStartTrackingtouch(Seekbar seekbar) {}    @OverrIDe    public voID onStopTrackingtouch(Seekbar seekbar) {    }};
解决方法 MediaPlayer.setVolume将该播放器的音量设置为该流的总音量的百分比.它不会影响流量.因此,如果您只想设置该播放器的音量,请将其设置为0到1之间的某个值(表示百分比的小数值),并让用户使用硬件音量控件分别控制系统音量.要连接Seekbar,您可以像在示例代码中那样将其缩放100倍,因为Seekbar不支持小数值.哦,还有一件事可以让别人受益(因为你已经弄清楚了):文档说“UI控件应该按对数比例缩放”,这意味着如果你只是设置音量没有任何缩放,音量控制将觉得不自然.基本上,人体耳朵不会将波的幅度减半为“体积的一半”,因此您需要以对数方式进行缩放以使其对人耳感觉更自然,就像您在示例代码中所做的那样.

如果您确实要为给定流设置系统音量(而不仅仅是给定播放器),则可以使用AudioManager.setStreamVolume,其值介于0和AudioManager.getStreamMaxVolume返回的值之间.但请记住,一个通常是一个低分辨率的音量控制 – getMaxStreamVolume通常返回一个相对较低的值 – 如10或15,所以你只有一些可能的音量位置.这意味着控制音量不会像直接控制MediaPlayer的音量那样平滑.此外,显然,以这种方式设置音量会为整个系统设置它并影响所有应用程序,这可能不是用户想要的.

总结

以上是内存溢出为你收集整理的android – 如何管理MediaPlayer.setVolume()SeekBar来设置它的设备音量控制全部内容,希望文章能够帮你解决android – 如何管理MediaPlayer.setVolume()SeekBar来设置它的设备音量控制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1136937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存