`
modabobo
  • 浏览: 502166 次
文章分类
社区版块
存档分类
最新评论

使用【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 布局代码:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?xmlversion="1.0"encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/layout1"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
android:background
="@drawable/white"
xmlns:android
="http://schemas.android.com/apk/res/android"
>
<TextView
android:id="@+id/myText1"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="@string/str_text1"
android:textSize
="16sp"
android:textColor
="@drawable/black"
android:layout_x
="20px"
android:layout_y
="42px"
>
</TextView>
<ImageView
android:id="@+id/myImage"
android:layout_width
="48px"
android:layout_height
="48px"
android:layout_x
="110px"
android:layout_y
="32px"
>
</ImageView>
<TextView
android:id="@+id/myText2"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="@string/str_text2"
android:textSize
="16sp"
android:textColor
="@drawable/black"
android:layout_x
="20px"
android:layout_y
="102px"
>
</TextView>
<ProgressBar
android:id="@+id/myProgress"
style
="?android:attr/progressBarStyleHorizontal"
android:layout_width
="160dip"
android:layout_height
="wrap_content"
android:max
="7"
android:progress
="5"
android:layout_x
="110px"
android:layout_y
="102px"
>
</ProgressBar>
<ImageButton
android:id="@+id/downButton"
android:layout_width
="100px"
android:layout_height
="100px"
android:layout_x
="50px"
android:layout_y
="162px"
android:src
="@drawable/down"
>
</ImageButton>
<ImageButton
android:id="@+id/upButton"
android:layout_width
="100px"
android:layout_height
="100px"
android:layout_x
="150px"
android:layout_y
="162px"
android:src
="@drawable/up"
>
</ImageButton>
<ImageButton
android:id="@+id/normalButton"
android:layout_width
="60px"
android:layout_height
="60px"
android:layout_x
="50px"
android:layout_y
="272px"
android:src
="@drawable/normal"
>
</ImageButton>
<ImageButton
android:id="@+id/muteButton"
android:layout_width
="60px"
android:layout_height
="60px"
android:layout_x
="120px"
android:layout_y
="272px"
android:src
="@drawable/mute"
>
</ImageButton>
<ImageButton
android:id="@+id/vibrateButton"
android:layout_width
="60px"
android:layout_height
="60px"
android:layout_x
="190px"
android:layout_y
="272px"
android:src
="@drawable/vibrate"
>
</ImageButton>
</AbsoluteLayout>

程序类分别为:

1、viewHolder
界面上的所有控件和元素都在这里静态声明

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->packagecom.terry;

importandroid.media.AudioManager;
importandroid.widget.ImageButton;
importandroid.widget.ImageView;
importandroid.widget.ProgressBar;

publicclassviewHolder{

publicstaticImageButtondownButton;
publicstaticImageButtonupButton;
publicstaticImageButtonnormalButton;
publicstaticImageButtonmuteButton;
publicstaticImageButtonvibrateButton;
publicstaticProgressBarmyProgressBar;

publicstaticImageViewmyImageView;

publicstaticAudioManageraudiomanage;
}

2、AudioManagerActivity

  程序入口处,和主要逻辑代码的处理,程序开头以 (AudioManager)getSystemService(AUDIO_SERVICE); 取得 AudioManager 对象。然后再利用该对象来对铃声进行调整。声明了一个返回 ImageButton 的方法,用来处理各自按钮点击所执行的不同事件和对图片的状态进行调整设置。以下把代码提供给大家:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->packagecom.terry;

importandroid.app.Activity;
importandroid.media.AudioManager;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.ImageButton;
importandroid.widget.ImageView;
importandroid.widget.ProgressBar;

publicclassAudioManagerActivityextendsActivity{
//音量变量
privateintvolume=0;
//声音模式
privateintmode;
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findview();
//通过getStreamVolume获得当前音量大小
volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
//把当前音量的值设置给进度条
viewHolder.myProgressBar.setProgress(volume);
//得到当前的声音模式
mode=viewHolder.audiomanage.getRingerMode();
setImageState();
viewHolder.downButton
=btnListener(viewHolder.downButton);
viewHolder.upButton
=btnListener(viewHolder.upButton);
viewHolder.muteButton
=btnListener(viewHolder.muteButton);
viewHolder.normalButton
=btnListener(viewHolder.normalButton);
viewHolder.vibrateButton
=btnListener(viewHolder.vibrateButton);
}

//找到控件
voidfindview(){
viewHolder.downButton
=(ImageButton)findViewById(R.id.downButton);
viewHolder.upButton
=(ImageButton)findViewById(R.id.upButton);
viewHolder.muteButton
=(ImageButton)findViewById(R.id.muteButton);
viewHolder.normalButton
=(ImageButton)findViewById(R.id.normalButton);
viewHolder.vibrateButton
=(ImageButton)findViewById(R.id.vibrateButton);
viewHolder.myImageView
=(ImageView)findViewById(R.id.myImage);
viewHolder.myProgressBar
=(ProgressBar)findViewById(R.id.myProgress);
viewHolder.audiomanage
=(AudioManager)getSystemService(AUDIO_SERVICE);
}


//按钮的单击事件
ImageButtonbtnListener(ImageButtonb){
b.setOnClickListener(
newOnClickListener(){

@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
switch(v.getId()){
caseR.id.downButton:
viewHolder.audiomanage.adjustVolume(AudioManager.ADJUST_LOWER,
0);
volume
=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
viewHolder.myProgressBar.setProgress(volume);
mode
=viewHolder.audiomanage.getRingerMode();
setImageState();
break;
caseR.id.upButton:
viewHolder.audiomanage.adjustVolume(AudioManager.ADJUST_RAISE,
0);
volume
=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
viewHolder.myProgressBar.setProgress(volume);
mode
=viewHolder.audiomanage.getRingerMode();
setImageState();
break;
caseR.id.muteButton:
viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_SILENT);
volume
=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
viewHolder.myProgressBar.setProgress(volume);
viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));
break;
caseR.id.normalButton:
viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
volume
=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
viewHolder.myProgressBar.setProgress(volume);
viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));
break;
caseR.id.vibrateButton:
viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
volume
=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
viewHolder.myProgressBar.setProgress(volume);
viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));
break;
}

}
});
returnb;
}

//设置图片状态
voidsetImageState(){
if(mode==AudioManager.RINGER_MODE_NORMAL)
{
viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));
}
elseif(mode==AudioManager.RINGER_MODE_SILENT)
{
viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));
}
elseif(mode==AudioManager.RINGER_MODE_VIBRATE)
{
viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));
}
}
}
分享到:
评论

相关推荐

    Android App中使用AudioManager类来编写音频播放器

    AudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作   以下分别是AudioManager设置声音模式和调整声音大小的方法。     如何获取声音管理器: AudioManager audioManager = ...

    Android 静音控制 音量控制 减小增大音量.rar

    Android 静音控制 音量控制 减小增大音量的实例源代码,如示图所示,音量控制时候,适时显示音量进度条:  ToggleButton tbMute = (ToggleButton)findViewById(R.id.tbMute);//获得ToggleButton对象  tbMute....

    音量控制AudioManager_Pro_v2.1.11汉化版

    通过这个程序可以控制系统全局音量,非常好用的。

    音量控制键控制的音频流(setVolumeControlStream)描述

    当开发多媒体应用或者游戏应用的时候,需要使用音量控制键来设置程序的音量大小。在Android系统中有多中音频流,通过Activity中的函数 setVolumeControlStream(int streamType)可以设置该Activity中音量控制键控制的...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    Google Android SDK开发范例大全的目录

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    Google+Android+SDK开发范例大全

    GET_CONTENT取回InputStream 7.7 相片导航向导与设置背景桌面——ImageSwitcher与Gallery 7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    Google Android sdk 开发范例大全 部分章节代码

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    Google Android SDK 开发范例大全01

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    Google Android SDK 开发范例大全02

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    Google Android SDK开发范例大全(完整版)

    7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与...

    android MP3播放器

    Mediaplayer+Service实现的MP3播放器。支持后台播放、进度条刷新、音量控制及其他基本功能。注释写的比较全,适合大众口味。

    Simple-Unity-Audio-Manager:一个用于Unity的分散式音频播放系统,旨在简化并按比例构建!

    分别控制主音量,声音音量和音乐音量! 音乐和声音逐渐消失! 内置循环点创作界面(由) 空间化的3D声音和音频! 随时间变化的音频 与Unity的内置音频效果兼容 拖放处理声音播放的组件 碰撞事件 触发事件 粒子...

Global site tag (gtag.js) - Google Analytics