沈阳保险公司招售后:Android 用AudioManager类控制音量

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 05:04:42

Android 用AudioManager类控制音量   [复制链接]

kongtiao kongtiao 当前离线
最后登录
2011-12-8
注册时间
2011-5-17
阅读权限
40
在线时间
6 小时
IP卡 狗仔卡

略有小成 Ⅴ

略有小成 Ⅴ, 积分 850, 距离下一级还需 650 积分
UID
501589
精华
0
帖子
294
e望
0 点
e币
550 元
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
1# 发表于 2011-5-23 12:01:02 |只看该作者 |倒序浏览 .pcb{margin-right:0}
       一个好的 Android 应用免不了会自带背景音乐,比如游戏或者一款比较不错的书本阅读器。一些好的应用在自带音乐的时候会多添加一款小功能即可以帮助用户设置声音大小或者改变应用的声音模式。

       那么我们就来认识一下

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

Java代码:

  1. android:id="@+id/layout1"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:background="@drawable/white"
  5. xmlns:android="http://schemas.android.com/apk/res/android"
  6. >
  7. android:id="@+id/myText1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:text="@string/str_text1"
  11. android:textSize="16sp"
  12. android:textColor="@drawable/black"
  13. android:layout_x="20px"
  14. android:layout_y="42px"
  15. >

  16. android:id="@+id/myImage"
  17. android:layout_width="48px"
  18. android:layout_height="48px"
  19. android:layout_x="110px"
  20. android:layout_y="32px"
  21. >

  22. android:id="@+id/myText2"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:text="@string/str_text2"
  26. android:textSize="16sp"
  27. android:textColor="@drawable/black"
  28. android:layout_x="20px"
  29. android:layout_y="102px"
  30. >

  31. android:id="@+id/myProgress"
  32. style="?android:attr/progressBarStyleHorizontal"
  33. android:layout_width="160dip"
  34. android:layout_height="wrap_content"
  35. android:max="7"
  36. android:progress="5"
  37. android:layout_x="110px"
  38. android:layout_y="102px"
  39. >

  40. android:id="@+id/downButton"
  41. android:layout_width="100px"
  42. android:layout_height="100px"
  43. android:layout_x="50px"
  44. android:layout_y="162px"
  45. android:src="@drawable/down"
  46. >

  47. android:id="@+id/upButton"
  48. android:layout_width="100px"
  49. android:layout_height="100px"
  50. android:layout_x="150px"
  51. android:layout_y="162px"
  52. android:src="@drawable/up"
  53. >

  54. android:id="@+id/normalButton"
  55. android:layout_width="60px"
  56. android:layout_height="60px"
  57. android:layout_x="50px"
  58. android:layout_y="272px"
  59. android:src="@drawable/normal"
  60. >

  61. android:id="@+id/muteButton"
  62. android:layout_width="60px"
  63. android:layout_height="60px"
  64. android:layout_x="120px"
  65. android:layout_y="272px"
  66. android:src="@drawable/mute"
  67. >

  68. android:id="@+id/vibrateButton"
  69. android:layout_width="60px"
  70. android:layout_height="60px"
  71. android:layout_x="190px"
  72. android:layout_y="272px"
  73. android:src="@drawable/vibrate"
  74. >

复制代码
       程序类分别为:

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

Java代码:
  1. package com.Demo;

  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. public static ImageView myImageView;

  14. public static AudioManager audiomanage;
  15. }
复制代码
       2、AudioManagerActivity

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

Java代码:
  1. package com.Demo;

  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. void findview(){
  36. viewHolder.downButton=(ImageButton)findViewById(R.id.downButton);
  37. viewHolder.upButton=(ImageButton)findViewById(R.id.upButton);
  38. viewHolder.muteButton=(ImageButton)findViewById(R.id.muteButton);
  39. viewHolder.normalButton=(ImageButton)findViewById(R.id.normalButton);
  40. viewHolder.vibrateButton=(ImageButton)findViewById(R.id.vibrateButton);
  41. viewHolder.myImageView=(ImageView)findViewById(R.id.myImage);
  42. viewHolder.myProgressBar=(ProgressBar)findViewById(R.id.myProgress);
  43. viewHolder.audiomanage=(AudioManager)getSystemService(AUDIO_SERVICE);
  44. }

  45. //按钮 的单击事件
  46. ImageButton btnListener(ImageButton b){
  47. b.setOnClickListener(new OnClickListener() {

  48. @Override
  49. public void onClick(View v) {
  50. // TODO Auto-generated method stub
  51. switch (v.getId()) {
  52. case R.id.downButton:
  53. viewHolder.audiomanage.adjustVolume(AudioManager.ADJUST_LOWER, 0);
  54. volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  55. viewHolder.myProgressBar.setProgress(volume);
  56. mode=viewHolder.audiomanage.getRingerMode();
  57. setImageState();
  58. break;
  59. case R.id.upButton:
  60. viewHolder.audiomanage.adjustVolume(AudioManager.ADJUST_RAISE, 0);
  61. volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  62. viewHolder.myProgressBar.setProgress(volume);
  63. mode=viewHolder.audiomanage.getRingerMode();
  64. setImageState();
  65. break;
  66. case R.id.muteButton:
  67. viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_SILENT);
  68. volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  69. viewHolder.myProgressBar.setProgress(volume);
  70. viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));
  71. break;
  72. case R.id.normalButton:
  73. viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
  74. volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  75. viewHolder.myProgressBar.setProgress(volume);
  76. viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));
  77. break;
  78. case R.id.vibrateButton:
  79. viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
  80. volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
  81. viewHolder.myProgressBar.setProgress(volume);
  82. viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));
  83. break;
  84. }

  85. }
  86. });
  87. return b;
  88. }

  89. //设置图片状态
  90. void setImageState(){
  91. if(mode==AudioManager.RINGER_MODE_NORMAL)
  92. {
  93. viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));
  94. }
  95. else if(mode==AudioManager.RINGER_MODE_SILENT)
  96. {
  97. viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));
  98. }
  99. else if(mode==AudioManager.RINGER_MODE_VIBRATE)
  100. {
  101. viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));
  102. }
  103. }
  104. }
复制代码