`
wjlgryx
  • 浏览: 306800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 使用 AudioManager 类控制音量

 
阅读更多

本篇基于 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 布局代码:

  < ?xml version="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

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

  package com.terry;

  import android.media.AudioManager;

  import android.widget.ImageButton;

  import android.widget.ImageView;

  import android.widget.ProgressBar;

  public class viewHolder {

  public static ImageButton downButton;

  public static ImageButton upButton;

  public static ImageButton normalButton;

  public static ImageButton muteButton;

  public static ImageButton vibrateButton;

  public static ProgressBar myProgressBar;

  public static ImageView myImageView;

  public static AudioManager audiomanage;

  }

  2、AudioManagerActivity

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

  package com.terry;

 

  import android.app.Activity;

  import android.media.AudioManager;

  import android.os.Bundle;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.widget.ImageButton;

  import android.widget.ImageView;

  import android.widget.ProgressBar;

  public class AudioManagerActivity extends Activity {

  //音量变量

  private int volume=0;

  //声音模式

  private int mode;

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState) {

  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);

  }

  //找到控件

  void findview(){

  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);

  }

  //按钮 的单击事件

  ImageButton btnListener(ImageButton b){

  b.setOnClickListener(new OnClickListener() {

  @Override

  public void onClick(View v) {

  // TODO Auto-generated method stub

  switch (v.getId()) {

  case R.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;

  case R.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;

  case R.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;

  case R.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;

  case R.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;

  }

  }

  });

  return b;

  }

  //设置图片状态

  void setImageState(){

  if(mode==AudioManager.RINGER_MODE_NORMAL)

  {

  viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));

  }

  else if(mode==AudioManager.RINGER_MODE_SILENT)

  {

  viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));

  }

  else if(mode==AudioManager.RINGER_MODE_VIBRATE)

  {

  viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));

  }

  }

  }

分享到:
评论

相关推荐

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

    在Android平台上,AudioManager类是系统提供的用于管理音频输出的关键组件。它提供了各种接口和方法,使得开发者能够控制系统的音频属性,包括调整音量。在本文中,我们将深入探讨如何使用AudioManager来修改系统...

    android音量(自定义音量)

    Android 音量控制是一个非常重要的功能,通过使用 AudioManager 类可以实现音量控制,并且可以自定义音量控制。通过本篇文章,读者可以快速掌握 Android 音量控制的实现过程,并且可以应用于实际的 Android 开发中。

    Android自定义(四)音量控制器的实现

    在Android中,音量是通过AudioManager类来管理的。我们需要获取AudioManager实例,并调用其`getStreamMaxVolume()`方法获取特定音量类型的最大值,如`AudioManager.STREAM_MUSIC`代表媒体音量。同样,使用`...

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

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

    android java 自定义音量键seekbar控制系统的媒体音量和通话音量,可自动实现切换

    在Android开发中,有时我们需要对系统的音量进行自定义控制,比如使用Seekbar来模拟音量调节滑块,同时能够根据不同的场景(如媒体播放、通话中)智能切换控制对应的音量。本教程将深入讲解如何实现这个功能,主要...

    android设置系统音量、媒体音量Demo

    在Android平台上,调整系统...总结,Android系统音量和媒体音量的控制涉及到`AudioManager`类的使用,理解其API和音量类别是实现此功能的关键。通过源码分析和实际运行,开发者可以更直观地学习和掌握这一功能的实现。

    Android 各种音量的获取

    在Android中,我们可以使用`AudioManager`类来获取不同类型的音量,具体实现如下: ```java // 获取AudioManager实例 AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); // 通话音量 ...

    android 音量控制

    - Android提供了`AudioManager`类来管理设备的音频输出,包括音量控制。通过调用`AudioManager`的方法,我们可以实现程序中动态调整音量: - `adjustVolume(int direction, int flags)`:根据参数`direction`(如`...

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

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

    安卓Android源码——仿ios音量调节的效果.zip

    可以使用`AudioManager`类提供的`setStreamVolume()`方法来设置特定音量流(如MediaPlayer的音频流)的音量。 5. **权限管理**:在Android 6.0及以上版本,访问音量控制可能需要请求运行时权限。确保在代码中适当地...

    android设置系统亮度、音量

    在Android操作系统中,控制设备的亮度、音量以及开关功能如GPS和WiFi是常见的操作,这对于用户来说至关重要,因为它们直接影响到设备的使用体验。本文将深入探讨如何在Android平台上实现这些功能。 首先,让我们来...

    Android 手势调节亮度和音量

    对于音量调节,Android提供了一系列的`AudioManager`类的方法,如`adjustVolume(int direction, int flags)`或`setStreamVolume(int streamType, int index, int flags)`。前者可以根据用户滑动的方向增加或减少音量...

    android音量控制

    为了实现音量控制功能,Android提供了AudioManager类,该类提供了大量与音频管理相关的API。例如,`AudioManager.getStreamVolume(int streamType)`可以获取指定类型的音量值,而`AudioManager.setStreamVolume(int ...

    Android 自定义View (四) 视频音量调控

    1. **音量获取与设置**:使用Android系统的AudioManager服务来获取当前音量,并可以调用其方法改变音量级别。例如,`AudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)`获取音乐流的音量,`AudioManager....

    Android实现手机音量最大值限制

    开发者通常需要使用AudioManager类来操作这些音量流。 1. **AudioManager的使用**: - `getStreamMaxVolume(int streamType)`:获取指定音量流的最大值。 - `getStreamVolume(int streamType)`:获取指定音量流...

    android 音量控制 定时 震动 静音 铃声 情景模式 设置

    在Android系统中,音量控制、定时、震动、静音以及铃声等元素构成了用户交互的重要部分,而情景模式的设置则进一步提升了用户体验。本文将深入探讨这些知识点,并结合一个小型示例进行解析。 首先,音量控制是...

    android自定义音量调节

    3. **音量控制**:Android系统的音量管理是通过`AudioManager`类实现的。首先,你需要获取一个`AudioManager`实例,然后调用`getStreamVolume()`方法获取当前音量,`setStreamVolume()`方法设置新的音量值。音量流...

    音量控制类source.zip_控制音量_音量_音量控制

    在Android应用开发中,音量控制通常涉及到AudioManager类,该类提供了调节系统各种音量流(如媒体音量、闹钟音量等)的方法。在iOS开发中,我们可以使用AVFoundation框架来控制音量。开发者可以通过这些API获取当前...

    Android自定义控件——音量控制器

    4. 使用`AudioManager`控制音量。 5. 可选:添加额外功能,如显示音量百分比、动态调整滑块大小等。 6. 在布局文件中引用`VolumeView`。 7. 声明`VolumeView`所在的包名。 通过以上步骤,我们可以创建出一个既美观...

    Android应用源码仿ios音量调节的效果.zip

    3. 音量管理:在Android中,我们可以使用AudioManager类来获取和设置音量。首先,需要获取AudioManager实例,然后调用getStreamVolume()获取当前音量,setStreamVolume()来设置新的音量。音量有多个流类型,如STREAM...

Global site tag (gtag.js) - Google Analytics