更改 Android 中的媒体音量?

Posted

技术标签:

【中文标题】更改 Android 中的媒体音量?【英文标题】:Change Media volume in Android? 【发布时间】:2011-05-09 21:40:52 【问题描述】:

我可以更改媒体音量吗?如何?到目前为止我用过这个:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

但是有一个搜索栏并且想要更改媒体音量,而不是铃声音量。

那么有人可以告诉我如何在onCreate() 更改媒体音量,然后我会修复搜索栏。

【问题讨论】:

我也用这个方法。出于某种原因,我无法从我的表面视图中调用:- context.setVolumeControlStream(AudioManager.STREAM_MUSIC)?我不能用“this”替换“context”,因为我不在 Activity.. 任何提示? 我只想在来电时静音而不是播放视频。我该如何解决这个问题,我遇到了小米手机问题... 【参考方案1】:

正确的使用方法是在您的AudioManager 上使用setStreamVolume。它可能看起来像这样

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

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                             [int value],
                             [if desired a flag]);

标志的一个示例用法是在设置音量时发出哔声,以便用户可以听到结果。该标志将是AudioManager.FLAG_PLAY_SOUND

如果您不想播放声音但要显示带有当前值的 toast,则可以使用 AudioManager.FLAG_SHOW_UI。使用必须得到反馈。不管是听觉的还是视觉的。

要获得给定流的最大有效值,您只需在AudioManager 上调用getStreamMaxVolume() 并返回一个整数,它代表......以及音量的最大有效值。

【讨论】:

1.我不想要任何声音,如果我删除标志,我会收到错误。 2.您输入 [int value] 的可能值是多少?抱歉,我不小心按了 Enter,以为我只是跳了一行而不是发帖。 这需要任何许可吗? 嘿,我试图在我的应用程序中创建一个静音和取消静音按钮。我希望在进入应用程序之前将取消静音设置为用户音量。我尝试使用您的解释,但遇到了一个问题:***.com/questions/33589116/… @wutzebaer 没有。但是有个权限叫“MODIFY_AUDIO_SETTINGS”,有点奇怪……【参考方案2】:
private AudioManager audio;

onCreate 内部:

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

覆盖 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;
        // Update based on @Rene comment below:
        return super.onKeyDown(keyCode, event);
    

【讨论】:

有效,但默认应该是:return super.onKeyDown(keyCode, event);否则你会丢失结束应用程序的返回键,例如 非常正确...我可能也发现了这一点,但在示例中排除了它,然后由于轨迹球的滚动问题而在其中保持错误。 请注意,adjustStreamVolume 和其他方法的文档说明 “此方法只能用于替换音频设置的平台范围管理或主要电话应用程序的应用程序。” developer.android.com/reference/android/media/… @trgraglia:设置通过我的音频插槽连接的外部耳机的音量是否需要任何特殊的 API 调用?【参考方案3】:

您可以使用以下代码使用 SeekBar 来处理 Volume:

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

SeekBar sbVolumeBooster = (SeekBar) findViewById(R.id.sbVolumeBooster);
sbVolumeBooster.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); 
sbVolumeBooster.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));  

sbVolumeBooster.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 

    @Override
    public void onStopTrackingTouch(SeekBar arg0) 
    
    

    @Override
    public void onStartTrackingTouch(SeekBar arg0) 
    
    

    @Override
    public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) 
    
        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                progress, 0);  // 0 can also be changed to AudioManager.FLAG_PLAY_SOUND
    
);

【讨论】:

这是以编程方式改变声音的实际可接受的答案。【参考方案4】:

在标志中给出 0 可避免获得视觉和音频指示符。 当您实现自己的音频条和指示器并且您不希望 android 添加任何内容时,这很好。

【讨论】:

【参考方案5】:

使用adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, flags);

http://developer.android.com/reference/android/media/AudioManager.html#adjustStreamVolume(int, int, int)

【讨论】:

老实说,我不确定,但这是可能的标志列表:developer.android.com/reference/android/media/… 您也可以尝试给它一个不用于任何标志的数字,例如 0。这可能表示未使用任何标志。 0 表示没有标志。

以上是关于更改 Android 中的媒体音量?的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何颤振插件可以控制在 Android 和 iOS 上工作的设备的媒体音量?

Android 8.0 修改默认媒体音量

Android 6.0 修改默认媒体音量

Android MediaPlayer 已暂停,音量按钮不控制多媒体

更改 Android 音量条

如何在 Android 应用程序后台监听音量键事件?