Android:オーディオマネージャAudioManagerの使用

7571 ワード

システムの音量をプログラムで管理したり、システムを直接静音させるために、AudioManagerを使用して実現したり、MediaPlayerを使用してオーディオを制御したりすることができます.
オーディオ制御の簡単な例を次に示します(注:オーディオファイルはresフォルダの下にrawフォルダを作成する必要があります.あれば必要ありません.オーディオファイルを
フォルダ内)
メインActivity,AutoActivity.java
 
import android.app.Activity;
import android.app.Service;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ToggleButton;

public class AutoActivity extends Activity {
	Button play, up, down,stop;
	ToggleButton mute;
	AudioManager aManager;
	MediaPlayer mPlayer;
	boolean flag = true;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_auto);

		aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
		play = (Button) findViewById(R.id.playBtn);
		up = (Button) findViewById(R.id.upBtn);
		down = (Button) findViewById(R.id.downBtn);
		stop = (Button) findViewById(R.id.stopBtn);
		mute = (ToggleButton) findViewById(R.id.silenceBtn);
		//    MediaPlayer  ,      
		mPlayer = MediaPlayer.create(AutoActivity.this,
				R.raw.love);

		play.setOnClickListener(new OnClickListener() {
			//       
			@Override
			public void onClick(View v) {
				
				//       
				if(flag) {
					play.setText("  ");
					mPlayer.setLooping(true);//       
					mPlayer.start();
					flag = false;
				}else {
					play.setText("  ");
					mPlayer.pause();
					flag = true;
				}
			}
		});
		up.setOnClickListener(new OnClickListener() {
			//    
			@Override
			public void onClick(View v) {
				//          ,    ,         
				aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
						AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
			}
		});
		down.setOnClickListener(new OnClickListener() {
			//    
			@Override
			public void onClick(View v) {
				//          ,    ,         
				aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
						AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
			}
		});
		stop.setOnClickListener(new OnClickListener() {
			//    
			@Override
			public void onClick(View v) {
				mPlayer.stop();
				play.setText("  ");
				flag = true;
				mPlayer = MediaPlayer.create(AutoActivity.this,
						R.raw.love);
			}
		});
		mute.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			//    
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				aManager.setStreamMute(AudioManager.STREAM_MUSIC, isChecked);
			}
		});
	}

}

インタフェースレイアウトファイル、activity_auto.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="360dp" >

        <TableRow>

            <Button
                android:id="@+id/playBtn"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="  " />

            <Button
                android:id="@+id/stopBtn"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="  " />
        </TableRow>

        <TableRow>

            <Button
                android:id="@+id/upBtn"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="VOL+" />

            <Button
                android:id="@+id/downBtn"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="VOL-" />

            <ToggleButton
                android:id="@+id/silenceBtn"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="  "
                android:textColor="#ff0000" />
        </TableRow>
    </TableLayout>

</LinearLayout>

プログラムは比較的簡単で、いくつかの簡単な機能ボタンしかありませんが、使い方を理解するには十分です~
MediaPlayerの使い方と方法、具体的には:
1)MediaPlayerインスタンスの入手方法:
直接newの方法を使用できます.
   MediaPlayer mp = new MediaPlayer();
次のようにcreateを使用することもできます.
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//setDataSourceを呼び出す必要はありません
 
2)再生するファイルの設定方法:
MediaPlayerが再生するファイルには、主に3つのソースが含まれています.
a.ユーザがアプリケーションに事前に持参したresourceリソース
例えば、MediaPlayer.create(this, R.raw.test);
b.SDカードまたはその他のファイルパスに格納されたメディアファイル
例:mp.setDataSource("/sdcard/test.mp3");
c.ネットワーク上のメディアファイル
例:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
 
MediaPlayerのsetDataSourceの4つの方法:
       setDataSource (String path)
       setDataSource (FileDescriptor fd)
       setDataSource (Context context, Uri uri)
   setDataSource (FileDescriptor fd, long offset, long length)
 
3)プレーヤーの主な制御方法:
Androidは、プレーヤーの状態を制御することによって、メディアファイルの再生を制御します.
prepare()とprepareAsync()は、同期と非同期の2つの方法でプレーヤーがprepare状態に入るように設定します.ただし、MediaPlayerインスタンスがcreateメソッドによって作成されている場合、createメソッドで呼び出されたため、最初の再生を開始する前にprepare()を呼び出す必要はありません.
start()は本当にファイル再生を開始する方法で、
pause()とstop()は比較的簡単で、再生を一時停止し停止する役割を果たし、
seekTo()は位置決め方法であり、プレーヤーが指定する位置から再生を開始することができるが、この方法は非同期の方法であることに注意しなければならない.つまり、この方法が戻ると位置決めが完了するという意味ではなく、特に再生されたネットワークファイルは、実際の位置決めが完了するとOnSeekCompleteがトリガーされる.onSeekComplete()は、必要に応じてsetOnSeekCompleteListener(OnSeekCompleteListener)設定リスナーを呼び出して処理することができる.
release()は、プレーヤーが占有するリソースを解放することができ、プレーヤーを使用しないと判断したら、できるだけ早くリソースを解放するように呼び出すべきである.
reset()は、プレーヤーをError状態から回復させ、Idle状態に戻すことができます.
 
 
4)プレーヤーのリスナーを設定する:
MediaPlayerは、プレーヤーの動作状態をよりよく監視し、様々な状況をタイムリーに処理するために、異なるリスナーを設定する方法を提供しています.
例:setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)など、プレーヤーを設定する際にはプレーヤーが現れる可能性を考慮してリスニングと処理ロジックを設定し、プレーヤーの頑丈性を保つ必要がある.