Android 小项目之--使用【AudioManager】类控制音量

一个好的 Android 应用免不了会自带背景音乐,比如游戏或者一款比较不错的书本阅读器。一些好的应用在自带音乐的时候会多添加一款小功能即可以帮助用户设置声音大小或者改变应用的声音模式。
本篇基于 Android API 中的 AudioManager 作讲述,使看过本篇的读者可以迅速的掌握这个类的实现过程。下面是本篇大纲:
  • 1、认识 AudioManager
  • 2、AudioManager 主要方法介绍
  • 3、程序逻辑实现过程
1、认识 AudioManager
AudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作。

2、AudioManager 主要方法介绍
邮于 AudioManager 该类方法过多,这里只讲述几个比较常用到的方法:
  • 方法:adjustVolume(int direction, int flags) 
    解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。
  • 方法:getMode() 
    解释:返回当前音频模式。
  • 方法:getRingerMode() 
    解释:返回当前的铃声模式。
  • 方法:getStreamVolume(int streamType) 
    解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。
  • 方法:setRingerMode(int ringerMode) 
    解释:改变铃声模式

3、程序逻辑实现过程
界面上设置了一个图片,表示当前铃声状态,一个进度条表示当前音量大小,五个图片按钮,用来表示增加/减小音量、普通模式、静音模式和震动模式。下面是界面的 XML 布局代码:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <AbsoluteLayout
  3.   android:id="@+id/layout1"
  4.   android:layout_width="fill_parent"
  5.   android:layout_height="fill_parent"
  6.   android:background="@drawable/white"
  7.   xmlns:android="http://schemas.android.com/apk/res/android"
  8. >
  9.   <TextView
  10.     android:id="@+id/myText1"
  11.     android:layout_width="wrap_content"
  12.     android:layout_height="wrap_content"
  13.     android:text="@string/str_text1"
  14.     android:textSize="16sp"
  15.     android:textColor="@drawable/black"
  16.     android:layout_x="20px"
  17.     android:layout_y="42px"
  18.   >
  19.   </TextView>
  20.   <ImageView
  21.     android:id="@+id/myImage"
  22.     android:layout_width="48px"
  23.     android:layout_height="48px"
  24.     android:layout_x="110px"
  25.     android:layout_y="32px"
  26.   >
  27.   </ImageView>
  28.   <TextView
  29.     android:id="@+id/myText2"
  30.     android:layout_width="wrap_content"
  31.     android:layout_height="wrap_content"
  32.     android:text="@string/str_text2"
  33.     android:textSize="16sp"
  34.     android:textColor="@drawable/black"
  35.     android:layout_x="20px"
  36.     android:layout_y="102px"
  37.   >
  38.   </TextView>
  39.   <ProgressBar
  40.     android:id="@+id/myProgress"
  41.     style="?android:attr/progressBarStyleHorizontal"
  42.     android:layout_width="160dip"
  43.     android:layout_height="wrap_content"
  44.     android:max="7"
  45.     android:progress="5"
  46.     android:layout_x="110px"
  47.     android:layout_y="102px"
  48.   >
  49.   </ProgressBar>
  50.   <ImageButton
  51.     android:id="@+id/downButton"
  52.     android:layout_width="100px"
  53.     android:layout_height="100px"
  54.     android:layout_x="50px"
  55.     android:layout_y="162px"
  56.     android:src="@drawable/down"
  57.   >
  58.   </ImageButton>
  59.   <ImageButton
  60.     android:id="@+id/upButton"
  61.     android:layout_width="100px"
  62.     android:layout_height="100px"
  63.     android:layout_x="150px"
  64.     android:layout_y="162px"
  65.     android:src="@drawable/up"
  66.   >
  67.   </ImageButton>
  68.   <ImageButton
  69.     android:id="@+id/normalButton"
  70.     android:layout_width="60px"
  71.     android:layout_height="60px"
  72.     android:layout_x="50px"
  73.     android:layout_y="272px"
  74.     android:src="@drawable/normal"
  75.   >
  76.   </ImageButton>
  77.   <ImageButton
  78.     android:id="@+id/muteButton"
  79.     android:layout_width="60px"
  80.     android:layout_height="60px"
  81.     android:layout_x="120px"
  82.     android:layout_y="272px"
  83.     android:src="@drawable/mute"
  84.   >
  85.   </ImageButton>
  86.   <ImageButton
  87.     android:id="@+id/vibrateButton"
  88.     android:layout_width="60px"
  89.     android:layout_height="60px"
  90.     android:layout_x="190px"
  91.     android:layout_y="272px"
  92.     android:src="@drawable/vibrate"
  93.   >
  94.   </ImageButton>
  95. </AbsoluteLayout>
复制代码
程序类分别为:1、viewHolder
界面上的所有控件和元素都在这里静态声明
  1. package com.terry;

  2. import android.media.AudioManager;
  3. import android.widget.ImageButton;
  4. import android.widget.ImageView;
  5. import android.widget.ProgressBar;

  6. public class viewHolder {

  7.     public static ImageButton downButton;
  8.     public static ImageButton upButton;
  9.     public static ImageButton normalButton;
  10.     public static ImageButton muteButton;
  11.     public static ImageButton vibrateButton;
  12.     public static ProgressBar myProgressBar;
  13.     
  14.     public static ImageView myImageView;
  15.     
  16.     public static AudioManager audiomanage;
  17. }
复制代码
2、AudioManagerActivity  程序入口处,和主要逻辑代码的处理,程序开头以 (AudioManager)getSystemService(AUDIO_SERVICE); 取得 AudioManager 对象。然后再利用该对象来对铃声进行调整。声明了一个返回 ImageButton 的方法,用来处理各自按钮点击所执行的不同事件和对图片的状态进行调整设置。以下把代码提供给大家:
  1. package com.terry;

  2. import android.app.Activity;
  3. import android.media.AudioManager;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener; 
  7. import android.widget.ImageButton;
  8. import android.widget.ImageView;
  9. import android.widget.ProgressBar;

  10. public class AudioManagerActivity extends Activity {
  11.     //音量变量
  12.     private int volume=0;
  13.     //声音模式
  14.     private int mode;
  15.     /** Called when the activity is first created. */
  16.     @Override
  17.     public void onCreate(Bundle savedInstanceState) {
  18.         super.onCreate(savedInstanceState);
  19.         setContentView(R.layout.main);
  20.         findview();
  21.         //通过getStreamVolume 获得当前音量大小
  22.         volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  23.         //把当前音量的值 设置给进度条
  24.         viewHolder.myProgressBar.setProgress(volume);
  25.         //得到当前的声音模式
  26.         mode=viewHolder.audiomanage.getRingerMode();
  27.         setImageState();
  28.         viewHolder.downButton=btnListener(viewHolder.downButton);
  29.         viewHolder.upButton=btnListener(viewHolder.upButton);
  30.         viewHolder.muteButton=btnListener(viewHolder.muteButton);
  31.         viewHolder.normalButton=btnListener(viewHolder.normalButton);
  32.         viewHolder.vibrateButton=btnListener(viewHolder.vibrateButton);
  33.     }
  34.     
  35.     //找到控件
  36.     void findview(){
  37.         viewHolder.downButton=(ImageButton)findViewById(R.id.downButton);
  38.         viewHolder.upButton=(ImageButton)findViewById(R.id.upButton);
  39.         viewHolder.muteButton=(ImageButton)findViewById(R.id.muteButton);
  40.         viewHolder.normalButton=(ImageButton)findViewById(R.id.normalButton);
  41.         viewHolder.vibrateButton=(ImageButton)findViewById(R.id.vibrateButton);
  42.         viewHolder.myImageView=(ImageView)findViewById(R.id.myImage);
  43.         viewHolder.myProgressBar=(ProgressBar)findViewById(R.id.myProgress);
  44.         viewHolder.audiomanage=(AudioManager)getSystemService(AUDIO_SERVICE);
  45.     }
  46.     
  47.     
  48.     //按钮 的单击事件
  49.     ImageButton btnListener(ImageButton b){
  50.         b.setOnClickListener(new OnClickListener() {
  51.             
  52.             @Override
  53.             public void onClick(View v) {
  54.                 // TODO Auto-generated method stub
  55.                 switch (v.getId()) {
  56.                 case R.id.downButton:
  57.                     viewHolder.audiomanage.adjustVolume(AudioManager.ADJUST_LOWER,  0);
  58.                     volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  59.                     viewHolder.myProgressBar.setProgress(volume);
  60.                     mode=viewHolder.audiomanage.getRingerMode();
  61.                     setImageState();
  62.                     break;
  63.                 case R.id.upButton:
  64.                     viewHolder.audiomanage.adjustVolume(AudioManager.ADJUST_RAISE, 0);
  65.                     volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  66.                     viewHolder.myProgressBar.setProgress(volume);
  67.                     mode=viewHolder.audiomanage.getRingerMode();
  68.                     setImageState();
  69.                     break;
  70.                 case R.id.muteButton:
  71.                      viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_SILENT);
  72.                      volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  73.                      viewHolder.myProgressBar.setProgress(volume);
  74.                      viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));
  75.                     break;
  76.                 case R.id.normalButton:
  77.                     viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
  78.                     volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  79.                     viewHolder.myProgressBar.setProgress(volume);
  80.                     viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));
  81.                     break;
  82.                 case R.id.vibrateButton:
  83.                     viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
  84.                     volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  85.                     viewHolder.myProgressBar.setProgress(volume);
  86.                     viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));
  87.                     break;
  88.                 }
  89.                 
  90.             }
  91.         });
  92.         return b;
  93.     }
  94.     
  95.      //设置图片状态 
  96.     void setImageState(){
  97.         if(mode==AudioManager.RINGER_MODE_NORMAL)
  98.         {
  99.             viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));
  100.         }
  101.         else if(mode==AudioManager.RINGER_MODE_SILENT)
  102.         {
  103.             viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));
  104.         }
  105.         else if(mode==AudioManager.RINGER_MODE_VIBRATE)
  106.         {
  107.             viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));
  108.         }
  109.     }
  110. }
复制代码

此类大致操作如上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值