草庐IT

关于 java:Android:如何以编程方式设置 MediaPlayer 音量?

codeneng 2023-03-28 原文

Android : How to set MediaPlayer volume programmatically?

如何以编程方式设置媒体播放器音量。我将它用于警报通知。任何帮助都非常感谢,并提前感谢。


使用 AudioManager,您可以简单地控制媒体播放器的音量。

1
2
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);

也来自 MediaPlayer(但我没有尝试过)

1
setVolume(float leftVolume, float rightVolume)

Since: API Level 1

Sets the volume on this player. This API is recommended for balancing
the output of audio streams within an application. Unless you are
writing an application to control user settings, this API should be
used in preference to setStreamVolume(int, int, int) which sets the
volume of ALL streams of a particular type. Note that the passed
volume values are raw scalars. UI controls should be scaled
logarithmically.

Parameters

leftVolume left volume scalar

rightVolume right volume scalar

  • 设置值的最小音量是多少?
  • 如果为 0,则不需要音量。如果为 1,则在设备上以最大音量响铃。
  • 20号是多少?我以为你说音量是从0到1?
  • 20 是最大音量数(0 是最小值)。但我发现这可能因设备而异。您可以使用 audioManager.getStreamMaxVolume(streamType) 获得最大音量,如果您想以更可控的方式调整它,可以做一些漂亮的数学运算;-)
  • 我个人更喜欢 setVolume,因为它提供了更细粒度的控制,并且不依赖于输出设备(例如,蓝牙耳机的音量步长可能更小)
  • 请注意,setVolumes 值范围(0.0-1.0)是相对于当前媒体音量的。因此,如果媒体音量为 0,那么无论值是多少,都不会发出声音 :)


希望有帮助

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

用于提高音量

1
2
 audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                        AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

用于降低音量

1
2
audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                        AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);

  • 嗨 dwivedi ji,我们可以通过设备的音量按钮调整通知声音吗?
  • 有没有办法提高实际 MediaPlayer 文件的音量,而不是电话音量?我得到一个播放非常低的 MediaPlayer,即使电话音量正常。


MediaPlayer 类中确实有 setVolume 方法。看这里


隐藏音量控制 UI:

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

提高音量

1
2
audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                    AudioManager.ADJUST_RAISE, 0);

用于降低音量

1
2
audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                    AudioManager.ADJUST_LOWER, 0);

您可以使用 Kotlin 执行以下操作,此代码将检查媒体音量是否超过设备最大音量的 20%,并将其减少到仅 20%。

1
2
3
4
5
6
7
8
9
10
11
    val audio = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager
    val level = audio.getStreamVolume(AudioManager.STREAM_MUSIC)

    val maxVolume = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
    val percent = 0.2f
    val twintyVolume = (maxVolume * percent).toInt()

    if ( level > twintyVolume) {
        Toast.makeText(this,"audio level is $level", Toast.LENGTH_LONG).show()
        audio.setStreamVolume(AudioManager.STREAM_MUSIC,twintyVolume,0)
    }

  • twintyVolume 不错)


在此处阅读此页面。它解释得很好。
基本上,除非您的应用是替代闹钟,否则您需要在"onCreate()"函数中进行以下调用:

1
setVolumeControlStream(AudioManager.STREAM_MUSIC);

通过这种方式,您可以使用硬件按钮创建应用的音量。


代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
try
 {        
   float count = 100 * 0.2f;
   Log.d("--count_float", count +"");
   Log.d("--count_final", Math.round(count) +"");
   Log.d("--count_volume", new
   PreferenceMotionSensor(mContext).getStreamVolume());
   mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, Math.round(count), 0);
 }
catch (Exception e)
 {
  Log.d("--Error", e.getMessage());
 }

输出

1
2
3
D/--count_float: 20.0
D/--count_final: 20
D/--count_volume: 100

以下代码将音量设置为最大级别 (getStreamMaxVolume())。

1
2
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(AudioManager.STREAM_MUSIC,am.getStreamMaxVolume(AudioManager.STREAM_MUSIC),0);

试试这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
protected static void setVolume(int volume) {
        currentVolume = volume;
        {
            if (volume == 1) {
                volume = 2;
            }
            try {
                float vol = ((float) volume / CONSTANT.SYSTEM_MAX_VOLUME);
                mediaPlayer.setVolume(vol, vol);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

记得设置左右扬声器音量。

1
2
3
if (System.nanoTime() == alarm){
    yourMediaPlayer.setVolume(volume, volume)}
}

有关关于 java:Android:如何以编程方式设置 MediaPlayer 音量?的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  3. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  6. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  7. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  8. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

  9. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  10. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

随机推荐