我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android使用AudioManager修改系统音量的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android使用AudioManager修改系统音量的方法

本文实例讲述了Android使用AudioManager修改系统音量的方法。分享给大家供大家参考,具体如下:

下面介绍几个AudioManager的几个音量调整方面的方法.

首先是得到AudioManager实例:


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

调整音量方法有两种,一种是渐进式,即像手动按音量键一样,一步一步增加或减少,另一种是直接设置音量值.

1、渐进式


public void adjustStreamVolume (int streamType, int direction, int flags)
am.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

解释一下三个参数

第一个streamType是需要调整音量的类型,这里设的是媒体音量,可以是:

STREAM_ALARM 警报
STREAM_MUSIC 音乐回放即媒体音量
STREAM_NOTIFICATION 窗口顶部状态栏Notification,
STREAM_RING 铃声
STREAM_SYSTEM 系统
STREAM_VOICE_CALL 通话
STREAM_DTMF 双音多频,不是很明白什么东西

第二个direction,是调整的方向,增加或减少,可以是:

ADJUST_LOWER 降低音量
ADJUST_RAISE 升高音量
ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量

第三个flags是一些附加参数,只介绍两个常用的

FLAG_PLAY_SOUND 调整音量时播放声音
FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个

2、直接设置音量值的方法:


public void setStreamVolume (int streamType, int index, int flags)
am.setStreamVolume(AudioManager.STREAM_MUSIC, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_PLAY_SOUND);
am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);//得到听筒模式的最大值
am.getStreamVolume(AudioManager.STREAM_VOICE_CALL);//得到听筒模式的当前值

第一个和第三个参数与上面的相同

第二个参数是一个音量的int值,getStreamMaxVolume(int streamType)得到的是该类型音量的最大值,可以根据这个值计算你需要的音量,我这里直接调到最大.

最后我的代码:


package com.lp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import Android.app.Activity;
import Android.content.Context;
import Android.media.AudioFormat;
import Android.media.AudioManager;
import Android.media.AudioTrack;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.SeekBar;

public class MainActivity5 extends Activity {
  private Button play;
  private Button stop;
  private SeekBar soundValue;
  private AudioTrack at;
  private AudioManager am;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_sk);
    am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    play = (Button)findViewById(R.id.main_sk_play);
    stop = (Button)findViewById(R.id.main_sk_stop);
    soundValue = (SeekBar)findViewById(R.id.skbVolume);
    setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
    play.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        if(am.isSpeakerphoneOn()){
          am.setSpeakerphoneOn(false);
        }
        //setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
        am.setMode(AudioManager.MODE_IN_CALL);
        System.out.println(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
        System.out.println("&&&&&&&&&&&&&");
        System.out.println(am.getStreamVolume(AudioManager.STREAM_VOICE_CALL));
        //am.setStreamVolume(streamType, index, flags)
        int bufferSizeInBytes = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
        if(at==null){
          at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);
          System.out.println("22222");
          //at.setStereoVolume(100f, 100f);
          at.setStereoVolume(0.7f, 0.7f);//设置当前音量大小
          new AudioTrackThread().start();
        }else{
          if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
            System.out.println("111111111");
          }else{
            System.out.println("33333");
            at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);
            new AudioTrackThread().start();
          }
        }
      }
    });
    stop.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
          try{
            at.stop();
          }catch (IllegalStateException e)
          {
            e.printStackTrace();
          }
          at.release();
          am.setMode(AudioManager.MODE_NORMAL);
        }
      }
    });
//    soundValue.setMax(100);//音量调节的极限
//    soundValue.setProgress(70);//设置seekbar的位置值
    soundValue.setMax(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
    soundValue.setProgress(am.getStreamVolume(AudioManager.STREAM_VOICE_CALL));
    soundValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
      @Override
      public void onStopTrackingTouch(SeekBar seekBar) {
//       float vol=(float)(seekBar.getProgress())/(float)(seekBar.getMax());
//       System.out.println(vol);
//       at.setStereoVolume(vol, vol);//设置音量
        am.setStreamVolume(AudioManager.STREAM_VOICE_CALL, seekBar.getProgress(), AudioManager.FLAG_PLAY_SOUND);
      }
      @Override
      public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
      }
      @Override
      public void onProgressChanged(SeekBar seekBar, int progress,
          boolean fromUser) {
        // TODO Auto-generated method stub
      }
    });
  }
  class AudioTrackThread extends Thread{
    @Override
    public void run() {
      byte[] out_bytes = new byte[44100];
      InputStream is = getResources().openRawResource(R.raw.start);
      int length ;
      try{
        at.play();
      }catch (IllegalStateException e)
      {
        e.printStackTrace();
      }
      try {
        while((length = is.read(out_bytes))!=-1){
          //System.out.println(length);
          at.write(out_bytes, 0, length);
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
      if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
        try{
          at.stop();
        }catch (IllegalStateException e)
        {
          e.printStackTrace();
        }
        at.release();
        am.setMode(AudioManager.MODE_NORMAL);
      }
    }
  }
}

当然还要设置权限


<uses-permission Android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  <uses-permission Android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission Android:name="android.permission.RECORD_AUDIO" />

PS:关于Android Manifest功能与权限设置详细内容可参考本站在线工具:

Android Manifest功能与权限描述大全:

http://tools.jb51.net/table/AndroidManifest

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:Android系统音量条实例代码Android编程实现音量按钮添加监听事件的方法android编程获取和设置系统铃声和音量大小的方法Android 自定义SeekBar动态改变硬件音量大小实现和音量键的同步(推荐)Android seekbar(自定义)控制音量同步更新Android 使用Vitamio打造自己的万能播放器(2)—— 手势控制亮度、音量、缩放Android中自定义View实现圆环等待及相关的音量调节效果Android原生音量控制实例详解


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android使用AudioManager修改系统音量的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android使用AudioManager修改系统音量的方法

本文实例讲述了Android使用AudioManager修改系统音量的方法。分享给大家供大家参考,具体如下: 下面介绍几个AudioManager的几个音量调整方面的方法. 首先是得到AudioManager实例:AudioManager
2022-06-06

Linux系统修改环境变量的常用方法

本文详细介绍了修改Linux系统环境变量的常用方法,包括:永久修改系统范围环境变量(/etc/profile、/etc/environment)永久修改特定用户环境变量(~/.profile、~/.bash_profile、~/.bashrc)临时修改环境变量(export命令、环境变量声明)修改特定应用程序环境变量(命令行参数、配置文件)使用环境变量管理器
Linux系统修改环境变量的常用方法
2024-04-02

win8系统字体使用MacType工具修改方法

由于不能像往常一样在系统里手动修改字体了,所以我们需要用到一款工具,MacType(下载)是个不错的软件,这里能起到作用。所以我们这里就介绍下MacType的用法。安装MacType时没有太多需要注意的,就是在选择类型时我们建议一般需求的用
2022-06-04

Linux系统修改密码的方法

这篇文章主要讲解了“Linux系统修改密码的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统修改密码的方法”吧!今天使用kali的时候,由于虚拟机太多,密码还不一样,就忘记k
2023-06-16

SQLite在Android系统中的使用方法

严谨一点说,SQLite在Android设备中可以被当做是一种数据存储方法或者干脆是一个数据库正如其他大多数平台一样,Android 也提供了几种方法用来保存数据,使得这些数据即使在程序结束以后依然不会丢失。这些方法有:文本文件-可以保存在
2022-06-06

Android中默认系统的声音/大小修改和配置详解

前言声音管理系统用来实现声音的输入和输出、声音的控制和路由等功能,包括主和各种音源的音量调节、声音焦点控制,声音外设的检测和状态管理,声音源输入和输出的策略管理、音效的播放、音轨设置和播放、录音设置和启动等功能。最近在做定制需求的时候,需要
2023-05-30

windows7系统修复使用方法

尽管Windows 7(以下简称Win7)的稳定性已经非常不错,但难免遇到系统崩溃的情况,而此时很多用户还是按照老习惯和老方法,动不动就重做系统!其实你大可不必如此,利用Win7的自修复功能就可以方便、快捷地修复系统! Win7的系统维护功
2023-05-26

win10系统如何录制声音?win10录音机的使用方法

每个电脑都可以录制声音的,然后可以合成做别的作品,win10系统该如何录制声音?下面分享win10录音机的使用方法,需要的朋友可以参考下。 1、在win10系统桌面,点击”开js始“菜单中的”所有应用&l
2023-06-09

Win8.1系统如何修改Hosts文件?Win8.1系统修改Hosts文件的方法

Win8.1系统如何修改Hosts文件?有些用户也许不知道,当你修改Hosts文件后,Win8.1访问某些网站的速度会变快。你可以把你经常访问的网站添加到Hosts文件,以提高访问速度。那么Win8.1系统应该怎么修改Hosts文件呢?下面
2022-06-04

python修改操作系统时间的方法

时间:2015-07-07 14:03 来源:网管之家整理 字体:[大 中 小] 评论:0本文实例讲述了python修改操作系统时间的方法。分享给大家供大家参考。具体实现方法如下:#-*- coding:utf-8 -*-import so
2023-01-31

Android系统模拟位置的使用方法

本文为大家分享了Android模拟位置的使用方法,支持Android6.0,供大家参考,具体内容如下 1、开启系统设置中的模拟位置 Android 6.0 以下:【开发者选项 -> 允许模拟位置】Android 6.0 及以上:【开发者选项
2022-06-06

Win10系统修改默认字体的方法

本篇内容主要讲解“Win10系统修改默认字体的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Win10系统修改默认字体的方法”吧!Win10修改字体方法:1、右键点击“此电脑”,选择“属性”
2023-06-27

Golang实现系统时间修改的方法

由于修改系统时间可能会产生不可预知的后果,为了避免系统出现问题,正规的操作系统都不允许随意修改系统时间。然而,有些特殊情况下,我们确实需要修改系统时间,比如在进行一些测试或模拟实验时。本文将介绍如何使用Golang实现系统时间的修改,并提供
Golang实现系统时间修改的方法
2024-02-28

android系统在静音模式下关闭camera拍照声音的方法

话说为了防止偷拍,业内有不成文规定,手机公司在做camera时,点击拍照和录像键的时候,必须要有提示音。因此,google也就非常人性化的将播放拍照声音的函数,放到了cameraService中,防止开发者能开发出不响的camera,从而只
2022-06-06

如何修改Win8.1系统网络名称?修改Win8.1系统网络名称的方法

如何修改Win8.1系统网络名称?我们都知道网络连接在重新设置以后,就会变成网络1、网络2、网络3等,这样的现象还是比较普遍的,虽然不影响使用,但毕竟看着不舒服,而且不容易分辨。有Win8.1系统用户想要进行修改,可是不知道怎么操作,其实W
2022-06-04

Win7系统修复功能的使用方法

Win7简化了迅速最大化、窗口半屏显示、跳转目录(JumpList)、系统异常迅速修复的设计,简化了当地、网络和互联网搜索功能,融合自动化应用程序递交和交叉程序数据透光性,系统集成的搜索功能自动运行。那应该如何使用windows7系统修复功
2023-07-17

ubuntu系统修改时区和时间的方法

在linux计算机上,有两个时间,一个是硬件时间(BIOS中记录的时间,称为hwclock),另一个是操作系统时间(osclock)。硬件时钟由BIOS电池供电, 当计算机关机后,会继续运行,BIOS电池一般可使用几年,如果没电了,那BIO
2022-06-04

Win7系统快速批量修改MP3音乐信息无需借助第三方工具

快速批量修改Win7系统MP3音乐信息的方法分享给大家,MP3是Internet上最流行的音乐格式,它的体积小和音质佳伸手用户们的喜欢,mp3音乐除了有歌曲的名称之外,还会附带歌手以及专辑等信息,当我们在网上下载一些MP3歌曲的时候,这些信
2023-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录