我想知道如何从音量键控制我的应用程序音量(与我的信念相反,我读过他们只控制铃声音量).我应该覆盖onKey Down/Up吗?
或者还有其他方法可以实现这一目标吗?我问,因为如果我覆盖活动的上面提到的函数,那么只有当与此活动相关联的视图具有焦点时,函数才会收到事件,并且我正在寻找"Globaly"的东西(不工作)无论现在正在运行什么活动)
我有一个应用程序在其活动打开时播放间歇性声音,并且用户总是期望它发出这些噪音,但不幸的是它受到音乐流量的限制.我发现的选项是这样的:
我认为第三个选项可能是最好的,因为它将卷控制权交给用户,但是如果有一些方法可以在单个媒体播放器实例中覆盖系统卷,那么它也会起作用.
我感到很困惑...
SoundPool.play(int soundID,float leftVolume,float rightVolume,int priority,int loop,float rate)
这里的体积是0.0到1.0
我见过的教程建议将流量计算为:
AudioManager mgr = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
int streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume / AudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
Run Code Online (Sandbox Code Playgroud)
这是有道理的.
我假设此卷将覆盖用户在手机中设置的全局媒体卷,我可以通过更改soundPool中的流量来独立更改我的应用的音量.
但实际上它就像乘数一样 - 如果我在soundpool中设置0.5音量,实际音量将总是全局音量的一半.很容易重现:
有人可以解释为什么它会这样吗?传递给SoundPool.play方法的音量真的是全球音量的乘数吗?
我试图通过STREAM_SYSTEM上的媒体播放器播放声音
运用
mediaPlayer.setVolume(1.0f , 1.0f);
Run Code Online (Sandbox Code Playgroud)
要么
mediaPlayer.setVolume(0.90f , 0.90f);
Run Code Online (Sandbox Code Playgroud)
但它在设置中按照硬件音量控制播放.
基本上这条线没有效果.
我已经添加了
permissions "Modify..." as well in Manifest
Run Code Online (Sandbox Code Playgroud)
但我在stackoverflow中看到了这个API工作的链接.
我不想去API
AudioManager.setStreamVol()....
Run Code Online (Sandbox Code Playgroud)
因为它为所有应用设置了流量
这个setVol API无法正常工作的问题是什么?
任何人都可以提供工作样品的链接??
任何人都知道如何通过点击手机侧面的音量按钮来增加/减少媒体播放器的声音音量?如果手机设置为静音模式,我该如何静音?
我正在使用的代码:
mp = MediaPlayer.create(this, R.raw.sound);
mp.start();
Run Code Online (Sandbox Code Playgroud)