Android:オーディオマネージャAudioManagerの使用
システムの音量をプログラムで管理したり、システムを直接静音させるために、AudioManagerを使用して実現したり、MediaPlayerを使用してオーディオを制御したりすることができます.
オーディオ制御の簡単な例を次に示します(注:オーディオファイルはresフォルダの下にrawフォルダを作成する必要があります.あれば必要ありません.オーディオファイルを
フォルダ内)
メインActivity,AutoActivity.java
インタフェースレイアウトファイル、activity_auto.xml
プログラムは比較的簡単で、いくつかの簡単な機能ボタンしかありませんが、使い方を理解するには十分です~
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)など、プレーヤーを設定する際にはプレーヤーが現れる可能性を考慮してリスニングと処理ロジックを設定し、プレーヤーの頑丈性を保つ必要がある.
オーディオ制御の簡単な例を次に示します(注:オーディオファイルは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)など、プレーヤーを設定する際にはプレーヤーが現れる可能性を考慮してリスニングと処理ロジックを設定し、プレーヤーの頑丈性を保つ必要がある.