为了账号安全,请及时绑定邮箱和手机立即绑定

【android源码】使用AudioManager调节播放器音量的开发源码

标签:
Android

本文所讲内容是如何使用AudioManager来调节播放器的音量。首先说说大体的思路:用ProgressBar控件显示当前音量的大小;在Button控件的单击事件中改变音量的大小;最后也是最重要的是用什么控制音量,查了下资料,发现AudioManager可以调节各种类型的声音的音量,例如音乐声音、通话声音和铃声声音等。本文中所讲的是调节音乐的声音。

       本文涉及到的关键技术点包括:ProgressBar的使用、用MediaPlayer播放MP3音乐和AudioManager的使用。

       下面分步骤讲解:

       第一步:新建一个工程,命名为AudioManagerVolume,Activity命名为AdjustVolumeActivity。

       修改布局文件main.xml。修改后的代码如下:

XML/HTML代码

  1. <?xml version="1.0" encoding="utf-8"?>      

  2. <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"      

  3.     Android:orientation="vertical" android:layout_width="fill_parent"      

  4.     Android:layout_height="fill_parent" android:background="#FFFFFF">      

  5.     <Button Android:id="@+id/play" android:layout_width="wrap_content"      

  6.         Android:layout_height="wrap_content" android:text="播放MP3音乐" />      

  7.     <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"      

  8.         Android:orientation="horizontal" android:layout_width="fill_parent"      

  9.         Android:layout_height="fill_parent">      

  10.         <Button Android:id="@+id/down" android:layout_width="wrap_content"      

  11.             Android:layout_height="wrap_content"  android:text="减小" />      

  12.         <ProgressBar Android:id="@+id/progress"      

  13.             style="?Android:attr/progressBarStyleHorizontal"      

  14.             Android:layout_width="150dip" android:layout_height="wrap_content"      

  15.             />      

  16.         <Button Android:id="@+id/up" android:layout_width="wrap_content"      

  17.             Android:layout_height="wrap_content" android:text="增大" />      

  18.     </LinearLayout>      

  19. </LinearLayout>  

       第二步:修改AdjustVolumeActivity类。修改后代码如下:

Java代码

  1. package com.zyg.demo.adjustvolume;      

  2.       

  3. import java.io.IOException;      

  4.       

  5. import Android.app.Activity;      

  6. import Android.content.Context;      

  7. import Android.content.res.AssetFileDescriptor;      

  8. import Android.content.res.AssetManager;      

  9. import Android.media.AudioManager;      

  10. import Android.media.MediaPlayer;      

  11. import Android.os.Bundle;      

  12. import Android.view.View;      

  13. import Android.view.View.OnClickListener;      

  14. import Android.widget.Button;      

  15. import Android.widget.ProgressBar;      

  16.       

  17. import com.zyg.demo.progressbar.R;      

  18.       

  19. public class AdjustVolumeActivity extends Activity implements OnClickListener {      

  20.     private Button play = null;      

  21.     private Button down = null;      

  22.     private Button up = null;      

  23.       

  24.     private ProgressBar pb = null;      

  25.     private int maxVolume = 50; // 最大音量值       

  26.     private int curVolume = 20; // 当前音量值       

  27.     private int stepVolume = 0; // 每次调整的音量幅度       

  28.       

  29.     private MediaPlayer mediaPlayer = null;// 播放器       

  30.     private AudioManager audioMgr = null; // Audio管理器,用了控制音量       

  31.     private AssetManager assetMgr = null; // 资源管理器       

  32.       

  33.     private final String musicName = "hehe.MP3";      

  34.       

  35.     @Override      

  36.     public void onCreate(Bundle savedInstanceState) {      

  37.         super.onCreate(savedInstanceState);      

  38.         setContentView(R.layout.main);      

  39.       

  40.         // 初始化播放器、音量数据等相关工作       

  41.         initPlayWork();      

  42.         // 初始化视图       

  43.         initUI();      

  44.     }      

  45.       

  46.     /**    

  47.      * 初始化UI    

  48.      */      

  49.     private void initUI() {      

  50.         play = (Button) findViewById(R.id.play);      

  51.         down = (Button) findViewById(R.id.down);      

  52.         up = (Button) findViewById(R.id.up);      

  53.       

  54.         play.setOnClickListener(this);      

  55.         down.setOnClickListener(this);      

  56.         up.setOnClickListener(this);      

  57.         // 设置进度条       

  58.         pb = (ProgressBar) findViewById(R.id.progress);      

  59.         pb.setMax(maxVolume);      

  60.         pb.setProgress(curVolume);      

  61.     }      

  62.       

  63.     /**    

  64.      * 初始化播放器、音量数据等相关工作    

  65.      */      

  66.     private void initPlayWork() {      

  67.         audioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);      

  68.         // 获取最大音乐音量       

  69.         maxVolume = audioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);      

  70.         // 初始化音量大概为最大音量的1/2       

  71.         curVolume = maxVolume / 2;      

  72.         // 每次调整的音量大概为最大音量的1/6       

  73.         stepVolume = maxVolume / 6;      

  74.       

  75.         mediaPlayer = new MediaPlayer();      

  76.         assetMgr = this.getAssets();      

  77.     }      

  78.       

  79.     /**    

  80.      * 准备播放音乐    

  81.      *     

  82.      * @param music    

  83.      */      

  84.     private void prepareAndPlay() {      

  85.         try {      

  86.             // 打开指定音乐文件       

  87.             AssetFileDescriptor afd = assetMgr.openFd(musicName);      

  88.             mediaPlayer.reset();      

  89.             // 使用MediaPlayer加载指定的声音文件。       

  90.             mediaPlayer.setDataSource(afd.getFileDescriptor(),      

  91.                     afd.getStartOffset(), afd.getLength());      

  92.             // 准备声音       

  93.             mediaPlayer.prepare();      

  94.             // 播放       

  95.             mediaPlayer.start();      

  96.         } catch (IOException e) {      

  97.             e.printStackTrace();      

  98.         }      

  99.     }      

  100.       

  101.     /**    

  102.      * 调整音量    

  103.      */      

  104.     private void adjustVolume() {      

  105.         audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, curVolume,      

  106.                 AudioManager.FLAG_PLAY_SOUND);      

  107.     }      

  108.       

  109.     @Override      

  110.     public void onClick(View v) {      

  111.         int id = v.getId();      

  112.         switch (id) {      

  113.         case R.id.play://按下播放按钮       

  114.             prepareAndPlay();      

  115.             break;      

  116.         case R.id.up://按下增大音量按钮       

  117.             curVolume += stepVolume;      

  118.             if (curVolume >= maxVolume) {      

  119.                 curVolume = maxVolume;      

  120.             }      

  121.             pb.setProgress(curVolume);      

  122.             break;      

  123.         case R.id.down://按下减小音量按钮       

  124.             curVolume -= stepVolume;      

  125.             if (curVolume <= 0) {      

  126.                 curVolume = 0;      

  127.             }      

  128.             pb.setProgress(curVolume);      

  129.             break;      

  130.         default:      

  131.             break;      

  132.         }      

  133.         // 调整音量       

  134.         adjustVolume();      

  135.     }      

  136. }    

       备注:有的文章中提到需要添加权限<uses-permission Android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> ,我这里并没有添加,可以正常运行。

原文链接:http://www.apkbus.com/blog-919651-72631.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消