Android 애플릿 - [Audio Manager] 클래스를 사용하여 볼륨 조절(2)

10540 단어
좋은 안드로이드 앱은 게임이나 비교적 괜찮은 책 리더 같은 배경음악을 가지고 있기 마련이다.일부 좋은 응용 프로그램은 자체 음악을 가지고 있을 때 작은 기능을 추가한다. 즉, 사용자가 소리의 크기를 설정하거나 응용 프로그램의 소리 모드를 바꾸는 데 도움을 줄 수 있다.
이 편은 Android API의 Audio Manager에 대한 설명을 바탕으로 본 편을 본 독자들이 이런 종류의 실현 과정을 신속하게 파악할 수 있도록 한다.다음은 이 대강입니다.
1. Audio Manager 인식
2. AudioManager의 주요 방법 소개
3. 프로그램 논리 실현 과정
1. Audio Manager 인식
AudioManager 클래스는android에 있습니다.Media 패키지에서 클래스는 볼륨 및 볼륨 모드에 대한 액세스 제어 작업을 제공합니다.
 
2. AudioManager의 주요 방법 소개
Audio Manager 에 보내는 방법이 너무 많습니다. 여기에는 몇 가지 일반적인 방법만 설명되어 있습니다.
방법:adjustVolume(int direction, int flags)
설명: 이 방법은 핸드폰의 음량 크기를 조절하는 데 사용되며, 전송된 첫 번째 파라미터가 오디오 관리자일 때.ADJUST_LOWER에서는 볼륨을 단위로 줄여 Audio Manager에 전달할 수 있습니다.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/--><?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 인터페이스의 모든 컨트롤과 요소는 여기에 정적 성명
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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
프로그램 입구와 주요 논리 코드의 처리, 프로그램 시작은 (Audio Manager)getSystem 서비스(AUDIO SERVICE)로 한다.AudioManager 객체를 가져옵니다.그 다음에 이 대상을 이용하여 벨소리를 조정한다.ImageButton으로 돌아가는 방법을 설명합니다. 각 단추를 누르면 실행되는 이벤트와 그림의 상태를 조정하는 데 사용됩니다.다음은 코드를 제공합니다.
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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));
        }
    }
}

좋은 웹페이지 즐겨찾기