Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 使用AudioManager調節播放器音量的開發實例

使用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" /> ,我這裡並沒有添加,可以正常運行。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved