AudioManager(オーディオマネージャー)
このセクションの紹介:
マルチメディアの最初のセクションでは、SoundPool を使用して Duang の例を作成しました。子豚がボタンをクリックした後、突然「Duang」と鳴りました。 一音、その音は赤ちゃんを怖がらせて死ぬほどでした 幸い勤務時間中ではなかったので、こっそりブログを書いてマネージャーに知らせました。 それはあなたを殺します~ まあ、わかりました、音量に関しては、Android が提供する API (音量コントロール) を導入する必要があります:
AudioManager (オーディオ マネージャー) 、このクラスは Android.Media Under にあります。パッケージでは、音量調整や着信音モードに関する操作が提供されます。 このセクションでは、短いムービーを見る前に、デモ、つまり簡単なミュートを作成する方法を学びます。 デモに入り、ミュートをクリックして、、話してください~ さて、早速、このセクションを始めましょう!
公式 API ドキュメント: AudioManager
1. AudioManager オブジェクト インスタンスを取得します
AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
2. 関連の詳細な説明メソッド
よく使用されるメソッド:
:
- ボリューム調整(int方向、intフラグ): 携帯電話の音量を制御し、1 単位で上下に調整します。最初のパラメータ AudioManager.ADJUST_LOWER に従って判断します。これは 1 単位で下げることができ、AudioManager.ADJUST_RAISE で調整できます。 1 つのユニット
- adjustStream Volume(int streamType 、 int 方向、 int flags): 上記と同じですが、サウンドの種類を調整することができます 1) streamType パラメータはサウンドの種類を指定します。 STREAM_ALARM: 携帯電話のアラーム STREAM_MUSIC: 携帯電話の音楽
STREAM_RING: 電話の着信音 STREAM_SYSTEAM : 携帯電話システム
STREAM_DTMF: トーン STREAM_NOTIFICATION: システムプロンプト
STREAM_VOICE_CALL: 音声通話 2) 2 番目のパラメータは上記と同じで、音量を増減します。 3) AudioManager.FLAG_SHOW_UIなどのオプションのフラグビット、進行状況バーの表示、AudioManager.PLAY_SOUND: サウンドの再生- setStreamVolume(int streamType, int Index, intflags): ボリュームサイズを直接設定
- getMode (): 現在のオーディオモードを返します
- setMode(): サウンドモードを設定します 以下のモードがあります: MODE_NORMAL(通常)、MODE_RINGTONE(着信音)、MODE_IN_CALL(電話)、MODE_IN_COMMUNICATION(通話)
- getRingerMode( ): 現在の着信音モードを返します
- setRingerMode(int streamType): 着信音モードを設定します いくつかのモードがあります。 RINGER_MODE_NORMAL (通常)、RINGER_MODE_SILENT (ミュート)、RINGER_MODE_VIBRATE (振動) など: 携帯電話の現在の音量を取得します。最大値は 7、最小値は 0 です。0 に設定すると、自動的に振動モードに調整されます
- getStreamMaxVolume(int streamType): 特定の音量の最大値を取得します。電話機のサウンドタイプ
- setStreamMute(int streamType, boolean state): 電話機の特定のサウンドタイプをミュートに設定します
- setSpeakerphoneOn(boolean on): スピーカーをオンにするかどうかを設定します
- setMicrophoneMute (boolean on): マイクミュートを許可するかどうかを設定します
- isMicrophoneMute(): マイクがミュートかオンかを決定します
- isMusicActive(): アクティブな音楽があるかどうかを決定します
- isWiredHeadsetOn(): 決定しますヘッドフォンが接続されているかどうか
- その他の方法
- abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl): オーディオフォーカスを放棄します
- adjustSuggestedStreamVolume(int,int requestedStreamType intflags): 最も関連性の高いストリーム、または指定されたフォールバック ストリームの音量を調整します
- getParameters(String Keys): オーディオ ハードウェアのパラメータ値の可変数を設定します
- getVibrateSetting(int vibrateType):ユーザーの振動は振動タイプに設定されています
- isBluetoothA2dpOn(): A2DP Bluetooth ヘッドセットのオーディオルーティングがオンかオフかを確認します
- isBluetoothScoAvailableOffCall(): 現在のプラットフォームが SCO を使用してオフコールのユースケースをサポートしているかどうかを表示します
- isBluetoothScoOn(): 通信にBluetooth SCOが使用されているかどうかを確認します
- loadSoundEffects(): 効果音を読み込みます
- playSoundEffect((inteffectType, float volume): 効果音を再生します
- egisterMediaButtonEventReceiver(ComponentNameeventReceiver): コンポーネントの MEDIA_BUTTON インテントの唯一のレシーバーを登録します
- requestAudioFocus(AudioManager.OnAudioFocusChangeListener l, int streamType, int periodHint) オーディオフォーカスのリクエスト
- setBluetoothScoOn(boolean on): 通信に Bluetooth SCO ヘッドセットの使用をリクエスト
- startBluetoothSco/stopBluetoothSco()(): Bluetooth SCO オーディオ接続の開始/停止
- unloadSoundEffects(): サウンドのアンロードエフェクト
3. 使用例
へー、属性はたくさんありますが、そのうちのいくつかは Bluetooth などに関係します。ここでは最も一般的なメソッドの一部のみを説明します。
これまで見たことのない特別なものに出会ったら、もう一度ドキュメントを確認してみましょう。
簡単な例: Mediaplayer を使用して音楽を再生し、AudioManager で音量を調整し、ミュートします。
ちなみに、まずres配下にrawフォルダを作成し、そこにMP3リソースファイルを放り込んでください!
レンダリングの実行:
コード実装:
レイアウトコードactivity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="播放" /> <Button android:id="@+id/btn_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:enabled="false" android:text="停止" /> <Button android:id="@+id/btn_higher" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="调高音量" /> <Button android:id="@+id/btn_lower" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="调低音量" /> <Button android:id="@+id/btn_quite" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="静音" /></LinearLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_start; private Button btn_stop; private Button btn_higher; private Button btn_lower; private Button btn_quite; private MediaPlayer mePlayer; private AudioManager aManager; //定义一个标志用来标示是否点击了静音按钮 private int flag = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得系统的音频对象 aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE); //初始化mediaplayer对象,这里播放的是raw文件中的mp3资源 mePlayer = MediaPlayer.create(MainActivity.this, R.raw.countingstars); //设置循环播放: mePlayer.setLooping(true); bindViews(); } private void bindViews() { btn_start = (Button) findViewById(R.id.btn_start); btn_stop = (Button) findViewById(R.id.btn_stop); btn_higher = (Button) findViewById(R.id.btn_higher); btn_lower = (Button) findViewById(R.id.btn_lower); btn_quite = (Button) findViewById(R.id.btn_quite); btn_start.setOnClickListener(this); btn_stop.setOnClickListener(this); btn_higher.setOnClickListener(this); btn_lower.setOnClickListener(this); btn_quite.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_start: btn_stop.setEnabled(true); mePlayer.start(); btn_start.setEnabled(false); break; case R.id.btn_stop: btn_start.setEnabled(true); mePlayer.pause(); btn_stop.setEnabled(false); break; case R.id.btn_higher: // 指定调节音乐的音频,增大音量,而且显示音量图形示意 aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); break; case R.id.btn_lower: // 指定调节音乐的音频,降低音量,只有声音,不显示图形条 aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND); break; case R.id.btn_quite: // 指定调节音乐的音频,根据isChecked确定是否需要静音 flag *= -1; if (flag == -1) { aManager.setStreamMute(AudioManager.STREAM_MUSIC, true); //API 23过期- - // aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, // AudioManager.FLAG_SHOW_UI); //23以后的版本用这个 btn_quite.setText("取消静音"); } else { aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);//API 23过期- - // aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE, // AudioManager.FLAG_SHOW_UI); //23以后的版本用这个 aManager.setMicrophoneMute(false); btn_quite.setText("静音"); } break; } } }コードはまだ非常に単純です はい、追加で設定しますミュートメソッド
setStreamMute() は API バージョン 23 で期限切れになりました。 別のメソッドadjustStreamVolume(int, int, int)を使用して、3番目のプロパティ:
ADJUST_MUTEまたはADJUST_UNMUTEを設定できます。
ちなみに、こんなのもあるんですadjustStreamVolume()の第3引数に振動(Vibrator)を設定すると、 この権限を AndroidManifest.xml に追加する必要があります!
<**uses-permission android:name="android.permission.VIBRATE"**/>
4. コード サンプルのダウンロード
このセクションの概要:
さて、このセクションでは、音量を調整するための AudioManager の簡単な使用法を説明します。このタイプは、著者によって一般的には使用されません。 さあ、今後新たに取得できるスキルがあれば追加してください〜 ふふ、ミュートデモは書き終わりましたか?実際のニーズと組み合わせる必要があります〜
それに、今週は会社のWebSocketライブラリがリプレースされるので、ブログの更新頻度が低くなるかもしれません〜。 はい、以上です、ありがとうございます~