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

android AudioManager

阅读更多
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terryblog.blog.51cto.com/1764499/342814 一个好的 Android 应用免不了会自带背景音乐,比如游戏或者一款比较不错的书本阅读器。一些好的应用在自带音乐的时候会多添加一款小功能即可以帮助用户设置声音大小或者改变应用的声音模式。本篇基于 Android API 中的 AudioManager 作讲述,使看过本篇的读者可以迅速的掌握这个类的实现过程。下面是本篇大纲:
1、认识 AudioManager
2、AudioManager 主要方法介绍
3、程序逻辑实现过程
1、认识 AudioManagerAudioManager 类位于 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));
        }
    }
}
分享到:
评论

相关推荐

    AudioManager的setmode使用及其详解

    `AudioManager`是Android系统中的一个关键组件,用于管理和控制设备的音频输出。`setMode`方法是`AudioManager`中的一个重要接口,用于设定当前的音频模式,这直接影响到音频的路由和电话服务层的行为。在不同的音频...

    副麦回环测试代码

    在Android平台上进行音频开发时,有时我们需要确保设备的各个麦克风(如主麦和副麦)功能正常。副麦,通常是指除主麦克风之外的其他麦克风,可能用于捕捉环境声音、视频通话或者增强录音效果。对于副麦的测试,一个...

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

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

    android安卓切换听筒-外放-蓝牙耳机设备

    AudioManager是Android SDK提供的一个关键类,允许开发者管理设备的音频属性,包括音量、音频流类型、音频输出设备等。以下是一些关键方法: 1. `setMode(int mode)`: 设置音频模式。例如,`MODE_NORMAL`用于普通...

    android听筒和扬声器切换,兼容5.0以上

    `AudioManager`是Android提供的音频管理服务接口,提供了许多控制音频设备的方法。具体来说,我们可以使用以下方法: 1. **设置音频流类型**: 首先,我们需要确定我们的音频流类型。例如,对于电话通话,我们通常...

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

    在Android手机中,我们同样可以通过Android的SDK提供的声音管理接口来管理手机声音模式以及调整声音大小,这就是Android中AudioManager的使用。 AudioManager 类位于 android.Media 包中,该类提供访问控制音量和...

    MediaApp.rar

    《Android audiomanager在视频播放中的应用》 在Android开发中,媒体播放是常见的功能之一,尤其是音频管理和视频播放。本示例“MediaApp.rar”着重展示了如何利用Android的audiomanager组件进行视频播放的实践操作...

    Android 听筒扬声器切换(多机型兼容、兼容5.0以上)

    Android 听筒扬声器切换(多机型兼容、兼容5.0以上) 亲测有效机型(案例有限、仅供参考) 三星系:SM-A9000、SM-S5 魅族系:魅蓝E(yun os)、魅蓝note5 小米系:红米1s、小米note Vivo系:忘了什么型号了 详细...

    Android源码AudioManager和RingerManager分析文档

    在Android源码的基础上分析 音频文件的的扫描,系统铃声的管理以及情景模式的切换

    Android中使用AudioManager实现按键录音并保存以及点击播放功能示例代码.rar

    Android中使用AudioManager实现按键录音并保存以及点击播放功能示例代码 Android中使用AudioManager实现按键录音并保存以及点击播放功能示例代码 Android中使用AudioManager实现按键录音并保存以及点击播放功能示例...

    Audio Manager

    Audio Manager,隐藏程序和文件的app工具,假装一个音量调节器。

    Android程序设计-AudioManager介绍.pptx

    在Android程序设计中,AudioManager是一个至关重要的组件,它负责管理设备的音频输出,包括控制音量、处理音频流和管理音频焦点。本篇将详细阐述AudioManager的主要功能及其使用方法。 首先,AudioManager的实例化...

    背景音乐播放技术, 通过使用 MediaPlayer和AudioManager

    背景音乐播放技术, 通过使用 MediaPlayer,AudioManager 需要用到的dl.mid 文件放在assets, 读者需将其复制到 /sdcard/ 目录下 详情请参见 http://blog.csdn.net/aduovip/article/details/9026567

    Android基于AudioManager、PhoneStateListener实现设置黑名单功能

    onyManager.CALL_STATE_RINGING: tv02.setText("CALL_STATE_RINGING...不过,这个基础示例提供了一个清晰的框架,展示了如何在Android中结合AudioManager和PhoneStateListener处理电话事件,实现自定义的通话管理功能。

    AudioManager中文翻译

    `AudioManager` 是 Android 操作系统中的一个核心类,用于管理和控制系统的音频输出。通过 `AudioManager`,开发者可以调整音量大小、控制扬声器输出以及处理与音频相关的事件。该类继承自 `java.lang.Object` 并...

    Android 各种音量的获取

    - **AudioManager**:这是Android提供的用于管理音频流的类,开发者可以通过它来控制和获取系统中的音量。 - **Stream Types**:Android中的音频流被分为不同的类型,每种类型对应不同的应用场景,如通话、铃声、...

    android自定义音量调节

    在Android开发中,有时我们可能需要为用户提供更加个性化的...总之,自定义Android音量调节需要结合SeekBar组件、AudioManager服务以及界面设计技巧,通过监听事件并操作音频流,可以打造出具有个性化的音量控制体验。

    android 播放报警声音

    在Android平台上,播放报警声音是一项常见的功能,尤其在开发安全或者提醒类应用时必不可少。本文将深入探讨如何在Android应用中实现报警声音的播放,并提供相关的技术知识点。 首先,了解Android的声音播放机制至...

Global site tag (gtag.js) - Google Analytics